CSES - Datatähti 2024 alku - Results
Submission details
Task:Säähavainnot
Sender:cppbetter
Submission time:2023-11-01 23:44:08 +0200
Language:C++ (C++20)
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

Compiler report

input/code.cpp: In function 'void trig(double*)':
input/code.cpp:57:34: warning: 'lowAmpl' may be used uninitialized in this function [-Wmaybe-uninitialized]
   57 |     c = 3 * numbers::pi / 2 - (b * lowAmpl);
      |                               ~~~^~~~~~~~~~

Code

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

//#define TEST

using namespace std;

stringstream ss;

// y=a*sin(b*x+c)+d
// 
// H=a+d
// H-a=d
//
// L = -a+d
// L -d = -a
// d-L = a
// H-a-L = a
// H-L = 2a
// (H-L)/2 = a
// 
// pi/2 = bx+c 
// pi/2 - bx = c 


void trig(double* data)
{
    double a, b, c, d;

    b = 2.0 * numbers::pi / 24.0;

    double smallestVal = 10000;
    double largestVal = -10000;
    double lowAmpl;

    for (int i = 0; i < 24; i++)
    {
        if (smallestVal > data[i])
        {
            smallestVal =  data[i];
            lowAmpl = i;
        }
        if (largestVal < data[i])
        {
            largestVal = data[i];
        }
    }

    a = (largestVal - smallestVal) / 2;
    d = largestVal - a;
    c = 3 * numbers::pi / 2 - (b * lowAmpl);

    for (int i = 0; i < 12; i++)
    {
        if (abs((a * sin(i * b + c) + d) - data[i]) < 1.0)
            ss << a * sin(i * b + c) + d << " ";
        else
            ss << "?" << " ";
    }
    ss << "\n";

}

int main()
{
    int n;

#ifdef TEST
    fstream f;

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

    f >> n;

    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);
        }

        trig(&dt[0]);
    }

    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);
        }

        trig(&dt[0]);
    }

    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.177852 0.112917 0.009619...
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.65 2.75355 2.83301 2.88296 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
? ? ? ? ? ? ? ? ? ? ? ? 
13.1071 13.3 13.4657 13.5928 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
20.0313 20.2 20.0313 19.5368 1...
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.99792 ? ? -6.2 -6.639...
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
15.4 15.2569 14.8373 ? ? ? ? ?...
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
0.295284 0.85 1.32635 1.69186 ...
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
14.5971 14.9785 15.2182 15.3 1...
Truncated