| Task: | Säähavainnot |
| Sender: | adex720 |
| Submission time: | 2023-11-05 00:47:08 +0200 |
| Language: | C++ (C++17) |
| Status: | READY |
| Result: | 0 |
| group | verdict | score |
|---|---|---|
| #1 | WRONG ANSWER | 0 |
| test | verdict | time | score | |
|---|---|---|---|---|
| #1 | WRONG ANSWER | 0.00 s | 0 | details |
| #2 | WRONG ANSWER | 0.00 s | 0 | details |
| #3 | WRONG ANSWER | 0.00 s | 0 | details |
| #4 | WRONG ANSWER | 0.00 s | 0 | details |
| #5 | WRONG ANSWER | 0.00 s | 0 | details |
| #6 | WRONG ANSWER | 0.00 s | 0 | details |
| #7 | WRONG ANSWER | 0.00 s | 0 | details |
| #8 | WRONG ANSWER | 0.00 s | 0 | details |
Compiler report
input/code.cpp: In function 'int main()':
input/code.cpp:44:10: warning: variable 'haukia' set but not used [-Wunused-but-set-variable]
44 | bool haukia = false;
| ^~~~~~
input/code.cpp:114:9: warning: variable 'summatVaaka' set but not used [-Wunused-but-set-variable]
114 | int summatVaaka[n][m];
| ^~~~~~~~~~~
input/code.cpp:286:37: warning: 'nykyinenArvo' may be used uninitialized in this function [-Wmaybe-uninitialized]
286 | cout << nykyinenArvo << "\n";
| ^~~~Code
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios_base::sync_with_stdio();
cin.tie(nullptr);
bool debug = false;
int n, m, k, x, y, arvo, pienempi;
if (!debug)
{
cin >> n >> m >> k;
}
else
{
n = 5;
m = 6;
k = 13;
}
pienempi = min(n, m);
if (k == 0)
{
cout << 0;
return 0;
}
int arvot[n][m];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
arvot[i][j] = 0;
}
}
int arvoYhteensa = 0;
string kala;
bool rapuja = false;
bool haukia = false;
bool onkoHauki;
if (!debug)
{
for (int i = 0; i < k; i++)
{
cin >> y >> x;
x--;
y--;
cin >> kala;
onkoHauki = kala[0] == 'H';
if (onkoHauki)
haukia = true;
else
rapuja = true;
arvo = onkoHauki ? 1 : -10;
arvot[y][x] = arvo;
arvoYhteensa += arvo;
}
}
else
{
rapuja = true;
haukia = true;
arvot[0][0] = -10;
arvot[4][0] = -10;
arvot[1][1] = 1;
arvot[3][1] = 1;
arvot[4][1] = 1;
arvot[1][5] = -10;
arvot[2][2] = 1;
arvot[2][3] = -10;
arvot[2][4] = 1;
arvot[2][5] = -10;
arvot[3][3] = -10;
arvot[1][4] = 1;
arvot[4][4] = 1;
}
if (!rapuja)
{
if (k == n * m)
{
cout << arvoYhteensa - 1;
}
else
{
cout << arvoYhteensa;
}
return 0;
}
if (pienempi == 1)
{
if (n == 1 && m == 1)
{
cout << 0;
}
else
{
cout << arvoYhteensa + 10;
}
return 0;
}
int alas = (n - 1) / 2;
int vinoja = m + alas;
int summatVaaka[n][m];
int summatAlas[n][m];
int summatYlos[n][m];
int summa;
for (int y = 0; y < n; y++)
{
summa = 0;
for (int x = 0; x < m; x++)
{
summa += arvot[y][x];
summatVaaka[y][x] = summa;
}
}
int alku = 2 * alas;
int raja = 0;
int uusiX;
for (int x = 0; x < vinoja; x++) // toiseksi alimman vasemmanpuoleisinta riviä ei lasketa, kun n on parillinen
{
summa = 0;
if (x >= m - 1)
{
raja = 2 * (x - m + 1) + 1;
uusiX = x - alas;
}
else if (x < alas)
{
alku = 2 * x;
uusiX = 0;
}
else
{
alku = n - 1;
uusiX = x - alas;
}
for (int y = alku; y >= raja; y--)
{
summa += arvot[y][uusiX];
summatYlos[y][uusiX] = summa;
uusiX += y & 1;
}
}
raja = n;
for (int x = 0; x < vinoja; x++)
{
summa = 0;
if (x >= m)
{
raja = 2 * (m + alas - x);
uusiX = x - alas;
}
else if (x < alas)
{
alku = n - 2 * x - 1;
uusiX = 0;
}
else
{
alku = 0;
uusiX = x - alas;
}
for (int y = alku; y < raja; y++)
{
summa += arvot[y][uusiX];
summatAlas[y][uusiX] = summa;
uusiX += y & 1;
}
}
if (!(n & 1))
{
int x1 = 0;
int x2 = 0;
int y2 = n - 2;
int summa1 = 0;
int summa2 = 0;
for (int y1 = 2; y1 < n; y1++)
{
summa1 += arvot[y1][x1];
summatAlas[y1][x1] = summa1;
summa2 += arvot[y2][x2];
summatYlos[y2][x2] = summa2;
y2--;
if (y1 & 1)
{
x1++;
}
if ((y2 + 1) & 1)
{
x2++;
}
}
summa2 += arvot[y2][x2];
summatYlos[y2][x2] = summa2;
}
int minimi = -10;
int nykyinenArvo;
int alkuarvo;
int kokoM1;
int huipunXkorjaus;
for (int y = 0; y < n - 1; y++)
{
alkuarvo = arvot[y][0];
kokoM1 = 0;
for (int koko = 2; koko <= n - y && koko <= m; koko++)
{
kokoM1++;
huipunXkorjaus = (koko - 1 + (y & 1)) >> 1; // optimoi
if (y + koko < n)
{
int oikeaX = koko == 2 ? 0 : (koko - 2 + (y & 1)) >> 1;
alkuarvo += summatYlos[y][kokoM1] - summatYlos[y + koko][oikeaX];
}
else
alkuarvo += summatYlos[y][kokoM1];
nykyinenArvo = alkuarvo;
cout << nykyinenArvo << "\n";
if (nykyinenArvo < minimi)
{
minimi = nykyinenArvo;
}
raja = m - koko;
for (int x = 1; x <= raja; x++)
{
nykyinenArvo += summatYlos[y][kokoM1 + x] - summatAlas[y + kokoM1][huipunXkorjaus + x - 1];
if (y > 0 && (x > 1 || (y & 1)))
nykyinenArvo += summatAlas[y - 1][x - 1 - ((y + 1) & 1)];
if (y + koko < n)
nykyinenArvo -= summatYlos[y + koko][huipunXkorjaus + x - ((y + koko) & 1)];
cout << nykyinenArvo << "\n";
if (nykyinenArvo < minimi)
{
minimi = nykyinenArvo;
}
}
}
}
for (int y = n - 1; y > 0; y--)
{
alkuarvo = arvot[y][0];
kokoM1 = 0;
for (int koko = 2; y - koko >= -1 && koko <= m; koko++)
{
kokoM1++;
huipunXkorjaus = (koko - 1 + (y & 1)) >> 1; // optimoi
if (y - koko >= 0)
{
int oikeaX = koko == 2 ? 0 : (koko - 2 + (y & 1)) >> 1;
alkuarvo += summatAlas[y][kokoM1] - summatAlas[y - koko][oikeaX];
}
else
alkuarvo += summatAlas[y][kokoM1];
cout << nykyinenArvo << "\n";
nykyinenArvo = alkuarvo;
if (nykyinenArvo < minimi)
{
minimi = nykyinenArvo;
}
raja = m - koko;
for (int x = 1; x <= raja; x++)
{
nykyinenArvo += summatAlas[y][kokoM1 + x];
if (y - koko > 0)
{
nykyinenArvo -= summatAlas[y - koko][huipunXkorjaus + x - ((y + koko) & 1)];
}
nykyinenArvo -= summatYlos[y - kokoM1][huipunXkorjaus + x - 1];
if (y < n - 1 && (x > 1 || (y & 1)))
{
nykyinenArvo += summatYlos[y + 1][x - 1 - ((y + 1) & 1)];
}
cout << nykyinenArvo << "\n";
if (nykyinenArvo < minimi)
{
minimi = nykyinenArvo;
}
}
}
}
cout << arvoYhteensa - minimi;
}
Test details
Test 1
Verdict: WRONG ANSWER
| 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 |
Test 2
Verdict: WRONG ANSWER
| 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 |
|---|
| 0 |
Test 3
Verdict: WRONG ANSWER
| 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 |
|---|
| 0 |
Test 4
Verdict: WRONG ANSWER
| 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 |
|---|
| 0 |
Test 5
Verdict: WRONG ANSWER
| 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 |
|---|
| 0 |
Test 6
Verdict: WRONG ANSWER
| 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 |
|---|
| 0 |
Test 7
Verdict: WRONG ANSWER
| 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 |
Test 8
Verdict: WRONG ANSWER
| 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 |
|---|
| 0 |
