CSES - Datatähti 2024 alku - Results
Submission details
Task:Säähavainnot
Sender:cppbetter
Submission time:2023-11-01 23:38:42 +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:34:18: warning: variable 'c' set but not used [-Wunused-but-set-variable]
   34 |     double a, b, c, d;
      |                  ^
input/code.cpp:34:21: warning: variable 'd' set but not used [-Wunused-but-set-variable]
   34 |     double a, b, c, d;
      |                     ^

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++)
    {
        ss << data[i] << " ";
    }
    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.4 -0.1 -0.2 -0.3 -0.4 -0.5 ...
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.9 2.9 2.9 2.1 2.6 2 2 2.2 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
6.6 6 6.4 6 4.6 4.6 4.2 4.3 4....
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
19.4 20.2 19.1 18.9 18.3 17.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
-5.7 -5.8 -5.8 -5.9 -7.1 -6.9 ...
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
14.8 14.8 15.4 12.9 11.8 9.7 9...
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.7 1 2 1.4 0.6 -0.4 -0.9 -0.7...
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.1 15.3 14.9 14.4 14.4 13.7 ...
Truncated