CSES - Datatähti 2024 alku - Results
Submission details
Task:Säähavainnot
Sender:cppbetter
Submission time:2023-11-12 18:03:08 +0200
Language:C++ (C++20)
Status:READY
Result:65
Feedback
groupverdictscore
#1ACCEPTED65.38
Test results
testverdicttimescore
#1ACCEPTED0.02 s8.38details
#2ACCEPTED0.02 s8.5details
#3ACCEPTED0.02 s8.5details
#4ACCEPTED0.02 s8.38details
#5ACCEPTED0.02 s8.13details
#6ACCEPTED0.02 s8details
#7ACCEPTED0.02 s7.63details
#8ACCEPTED0.02 s7.88details

Code

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <vector>
#include <numeric>
#include <numbers>
#include <cmath>
#include <algorithm>
#include <array>
#include <unordered_map>

//#define TEST

using namespace std;

stringstream ss;
int toler = 4;

vector<double> estimate(vector<double>::iterator first, vector<double>::iterator last)
{
    vector<double> output;
    output.resize(12, -1000);

    double lv = *(last - 1);

    for (int i = 0; auto & e : output)
    {
        if (i++ < toler)
        {
            e = lv;
        }
        else if (*max_element(first, last) - *min_element(first, last) < 3 && i < 13)
            e = lv;
        else if (*max_element(first, last) - *min_element(first, last) < 5 && i < 8)
            e = lv;
        else if (*max_element(first, last) - *min_element(first, last) < 6 && i < 6)
            e = lv;
    }

    return output;
}


int main()
{
    int n;

#ifdef TEST
    fstream f;

    f.open(__FILE__ "/../../sample-data.txt");

    f >> n;
    n = 8000;

    int a = 0, b = 0;

    double bestScore = 0;
    double tl = 0;

    for (int i = 0; i < n; i++)
    {
        vector<double> dt;

        for (int j = 0; j < 36; j++)
        {
            double v;
            f >> v;
            dt.push_back(v);
        }

        auto res = estimate(dt.begin(), dt.begin() + 24);
        // Compare results
        //cout << i + 2 << ": ";
        for (int i = 0; i < 12; i++)
        {
            if (res[i] != -1000.0)
            {
                double dif = abs(res[i] - dt[i + 24]);
                if (dif < 0.75)
                {
                    //cout << "C ";
                    a++;
                }
                else if (dif > 2.05)
                {
                    //cout << res[i] - dt[i + 24] << " ";
                    b++;
                }
                else
                {
                    //cout << ". ";
                }
            }
        }

        //cout << "\n";
    }

    cout << "Value for tolerance: " << tl << "\n";


    cout << "Estimate results: (a: " << a << "), (b: " << b << ")\n";
    cout << "Final score: " << max(0.0, (25.0 * (a - b)) / ((double)n));

    f.close();
#else
    cin >> n;

    for (int i = 0; i < n; i++)
    {
        vector<double> dt;

        for (int j = 0; j < 24; j++)
        {
            double v;
            cin >> v;
            dt.push_back(v);
        }

        auto res = estimate(dt.begin(), dt.end());
        for (auto r : res)
        {
            if (r != -1000)
                ss << r << " ";
            else
                ss << "? ";
        }

        ss << "\n";
    }

    cout << ss.str();
#endif

    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.2 0.2 0.2 0.2 0.2 0.2 0.2 0....
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
2.6 2.6 2.6 2.6 2.6 2.6 2.6 2....
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
10.1 10.1 10.1 10.1 ? ? ? ? ? ...
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
17.2 17.2 17.2 17.2 ? ? ? ? ? ...
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
-4.5 -4.5 -4.5 -4.5 -4.5 -4.5 ...
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
12.6 12.6 12.6 12.6 ? ? ? ? ? ...
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.8 -1.8 -1.8 -1.8 -1.8 -1.8 ...
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
15 15 15 15 15 15 15 ? ? ? ? ?...
Truncated