CSES - Datatähti 2024 alku - Results
Submission details
Task:Säähavainnot
Sender:maweiyin24562
Submission time:2023-11-07 23:11:42 +0200
Language:C++ (C++17)
Status:READY
Result:0
Feedback
groupverdictscore
#1ACCEPTED0
Test results
testverdicttimescore
#1ACCEPTED0.02 s0details
#2ACCEPTED0.02 s0details
#3ACCEPTED0.02 s0details
#4ACCEPTED0.02 s0details
#5ACCEPTED0.02 s0details
#6ACCEPTED0.02 s0details
#7ACCEPTED0.02 s0details
#8ACCEPTED0.02 s0details

Code

#include <iostream>
#include <vector>
#include <iomanip>

// Simple linear regression model
class LinearRegression {
public:
    double slope;
    double intercept;

    LinearRegression() : slope(0.0), intercept(0.0) {}

    // Fit the model using provided data
    void fit(const std::vector<double>& x, const std::vector<double>& y) {
        double sum_x = 0.0;
        double sum_y = 0.0;
        double sum_x2 = 0.0;
        double sum_xy = 0.0;
        int n = x.size();

        for (int i = 0; i < n; ++i) {
            sum_x += x[i];
            sum_y += y[i];
            sum_x2 += x[i] * x[i];
            sum_xy += x[i] * y[i];
        }

        slope = (n * sum_xy - sum_x * sum_y) / (n * sum_x2 - sum_x * sum_x);
        intercept = (sum_y - slope * sum_x) / n;
    }

    // Predict the value for a given x
    double predict(double x) const {
        return slope * x + intercept;
    }
};

int main() {
    int n;
    std::cin >> n;

    for (int day = 0; day < n; ++day) {
        std::vector<double> pastTemperatures(24);
        for (int i = 0; i < 24; ++i) {
            std::cin >> pastTemperatures[i];
        }

        LinearRegression model;
        std::vector<double> x, y;

        // Prepare the data for regression
        for (int i = 0; i < 12; ++i) {
            x.push_back(i);
            y.push_back(pastTemperatures[i]);
        }

        // Fit the model
        model.fit(x, y);

        // Predict the temperatures for the next 12 hours
        for (int i = 12; i < 24; ++i) {
            double prediction = model.predict(i);
            if (i == 23) {
                std::cout << std::fixed << std::setprecision(1) << prediction << "\n";
            } else {
                std::cout << std::fixed << std::setprecision(1) << prediction << " ";
            }
        }
    }

    return 0;
}

Test details

Test 1

Verdict: ACCEPTED

input
1000
-0.4 -0.1 -0.2 -0.3 -0.4 -0.5 ...

correct output
0.4 0.4 0.5 0.8 0.9 1.1 1.3 1....

user output
-0.9 -0.9 -1.0 -1.0 -1.1 -1.2 ...
Truncated

Test 2

Verdict: ACCEPTED

input
1000
2.9 2.9 2.9 2.1 2.6 2 2 2.2 2....

correct output
2.3 1.6 1.5 1.1 1 0.7 0.6 0.8 ...

user output
1.8 1.8 1.7 1.6 1.5 1.5 1.4 1....
Truncated

Test 3

Verdict: ACCEPTED

input
1000
6.6 6 6.4 6 4.6 4.6 4.2 4.3 4....

correct output
10 10.9 10.3 10.1 9.1 7.3 5.7 ...

user output
2.4 2.1 1.7 1.4 1.1 0.7 0.4 0....
Truncated

Test 4

Verdict: ACCEPTED

input
1000
19.4 20.2 19.1 18.9 18.3 17.3 ...

correct output
18 18.2 17 17.5 17.2 16.2 12 8...

user output
11.1 10.3 9.5 8.7 7.9 7.1 6.3 ...
Truncated

Test 5

Verdict: ACCEPTED

input
1000
-5.7 -5.8 -5.8 -5.9 -7.1 -6.9 ...

correct output
-4.2 -4.1 -4 -3.8 -3.5 -3.2 -3...

user output
-8.1 -8.3 -8.5 -8.7 -8.9 -9.1 ...
Truncated

Test 6

Verdict: ACCEPTED

input
1000
14.8 14.8 15.4 12.9 11.8 9.7 9...

correct output
11.8 11 11.6 10.8 10.4 10.4 10...

user output
5.9 5.1 4.4 3.6 2.9 2.1 1.3 0....
Truncated

Test 7

Verdict: ACCEPTED

input
1000
0.7 1 2 1.4 0.6 -0.4 -0.9 -0.7...

correct output
-1.3 -0.5 -0.6 -1 -3.2 -7.2 -6...

user output
-1.3 -1.5 -1.7 -1.9 -2.1 -2.3 ...
Truncated

Test 8

Verdict: ACCEPTED

input
1000
15.1 15.3 14.9 14.4 14.4 13.7 ...

correct output
15.6 15.9 16 15.2 14.6 14.4 13...

user output
11.5 11.2 10.9 10.6 10.3 9.9 9...
Truncated