CSES - Datatähti 2024 alku - Results
Submission details
Task:Säähavainnot
Sender:Niilo
Submission time:2023-11-11 17:16:37 +0200
Language:C++ (C++17)
Status:READY
Result:0
Feedback
groupverdictscore
#10
Test results
testverdicttimescore
#10.00 s0details
#20.00 s0details
#30.00 s0details
#40.00 s0details
#50.00 s0details
#60.00 s0details
#70.00 s0details
#80.00 s0details

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:75:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   75 |   freopen("data.txt", "r", stdin);
      |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~

Code

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

#define TEST_MODE 1

#if TEST_MODE
int a[12];
int b[12];
#endif

float ar[36];

void guess() {
  float dif = 0.1F;
  int depth = 5;
  int mode = 0;

  float nmin = ar[0], nmax = ar[0];
  float slope = 0;
  for (int i=1; i < 24; i++) {
    nmin = min(nmin, ar[i]);
    nmax = max(nmax, ar[i]);
    slope = max(slope, abs(ar[i] - ar[i-1]));
  }
  float nmin2 = ar[18], nmax2 = ar[18];
  for (int i=19; i < 24; i++) {
    nmin2 = min(nmin2, ar[i]);
    nmax2 = max(nmax2, ar[i]);
  }
  
  int dif1 = abs(nmax - nmin);
  int dif2 = abs(nmax2 - nmin2);
  if (slope > 2.F) depth = 4;
  if (dif1 < 5.5F) depth = 6;
  if (dif1 < 4.0F) depth = 7;
  if (dif1 < 3.5F && dif2 < 2.5F) {
    depth = 9;
    mode = 1;
  }
  if (dif1 < 3.0F && dif2 < 2.0F) {
    depth = 12;
    mode = 1;
  }

  float pre = ar[23];
  for (int i=1; i <= 12; i++) {
    const int i2 = 23+i;
    if (i > depth) {
      ar[i2] = NAN;
      continue;
    }

    float cur = ar[i2-23];

    if (mode == 1) {
      ar[i2] = pre;
    }
    else {
      ar[i2] = abs(cur - pre) * i > dif ?
        pre + (cur < pre ? -dif : dif) * i : cur;
    }
  }
  if (ar[21] < ar[22] && ar[22] < ar[23]) {
    ar[24] = ar[23] + dif;
  } else if (ar[21] > ar[22] && ar[22] > ar[23]) {
    ar[24] = ar[23] - dif;
  } else {
    ar[24] = ar[23];
  }
}

int main() {
  #if TEST_MODE
  freopen("data.txt", "r", stdin);
  #endif
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  
  int n;
  cin >> n;
  for (int i=0; i < n; i++) {
    for (int j=0; j < 24; j++) cin >> ar[j];
    guess();
    for (int j=0; j < 12; j++) {
      float q = ar[j+24];
      #if TEST_MODE
      float ans;
      cin >> ans;
      if (isnan(q)) continue;
      if (abs(q - ans) < 0.75F) a[j]++;
      if (abs(q - ans) > 2.05F) b[j]++;
      #else
      if (isnan(q)) printf("? ");
      else printf("%f ", q);
      #endif
    }
  }
  #if TEST_MODE
  int asum = 0, bsum = 0;
  printf(" i |  a   |  b   | a-b  | %%\n");
  for (int i=0; i < 12; i++) {
    printf("%2d |%5d |%5d |%5d |%.2f\n", i, a[i], b[i], a[i]-b[i], a[i]/(float)n);
    asum += a[i];
    bsum += b[i];
  }
  printf("   |%5d |%5d |%5d |%.2f\n", asum, bsum, (25*(asum-bsum)/n), asum/(float)n);
  #endif
}

Test details

Test 1

Verdict:

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
 i |  a   |  b   | a-b  | %
 0 |   10 |    0 |   10 |1.00
 1 |   10 |    0 |   10 |1.00
 2

...
Truncated

Test 2

Verdict:

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
 i |  a   |  b   | a-b  | %
 0 |   10 |    0 |   10 |1.00
 1 |   10 |    0 |   10 |1.00
 2

...
Truncated

Test 3

Verdict:

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
 i |  a   |  b   | a-b  | %
 0 |   10 |    0 |   10 |1.00
 1 |   10 |    0 |   10 |1.00
 2

...
Truncated

Test 4

Verdict:

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
 i |  a   |  b   | a-b  | %
 0 |   10 |    0 |   10 |1.00
 1 |   10 |    0 |   10 |1.00
 2

...
Truncated

Test 5

Verdict:

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
 i |  a   |  b   | a-b  | %
 0 |   10 |    0 |   10 |1.00
 1 |   10 |    0 |   10 |1.00
 2

...
Truncated

Test 6

Verdict:

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
 i |  a   |  b   | a-b  | %
 0 |   10 |    0 |   10 |1.00
 1 |   10 |    0 |   10 |1.00
 2

...
Truncated

Test 7

Verdict:

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
 i |  a   |  b   | a-b  | %
 0 |   10 |    0 |   10 |1.00
 1 |   10 |    0 |   10 |1.00
 2

...
Truncated

Test 8

Verdict:

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
 i |  a   |  b   | a-b  | %
 0 |   10 |    0 |   10 |1.00
 1 |   10 |    0 |   10 |1.00
 2

...
Truncated