#include "artclass.h"
#include <random>
#include <chrono>
#include <vector>
#include <algorithm>
std::mt19937 rng(std::chrono::high_resolution_clock::now().time_since_epoch().count());
int style(int H, int W, int R[500][500], int G[500][500], int B[500][500])
{
auto dist=[&](int a, int b, int x, int y)->double
{
double d2=0;
d2 += (R[a][b]-R[x][y])*(R[a][b]-R[x][y]);
d2 += (G[a][b]-G[x][y])*(G[a][b]-G[x][y]);
d2 += (B[a][b]-B[x][y])*(B[a][b]-B[x][y]);
return sqrt(d2);
};
auto logistic=[&](double x)->double
{
const double x0 = 0;
const double rt = 0.2;
return 1/(1+exp((x-x0)*rt));
};
// differentiate between 1/4 and 2/3
double wtdif = 0;
for(int i=0;i+1<H;++i)
for(int j=0;j<W;++j)
wtdif += logistic(dist(i, j, i+1, j));
wtdif /= (H-1)*W;
// return (int)(wtdif*10000); // CUT: 1800
if(wtdif < 0.18)
{ // styles 2 or 3
/*
double green_factor = 0;
for(int i=0;i<H;++i)
for(int j=0;j<W;++j)
green_factor += (double)G[i][j]/(R[i][j]+G[i][j]+B[i][j]+1);
green_factor /= H*W;
*/
std::vector<double> vars;
int L = ((H+W)/2)/20;
for(int i=L;i+L<=H;++i)
for(int j=L;j+L<=W;++j)
{
auto var_col = [&](int col[500][500])->double
{
double mean = 0;
for(int u=i-L;u<i+L;++u)
for(int v=j-L;v<j+L;++v)
mean += col[u][v];
mean /= L*L*4;
double var = 0;
for(int u=i-L;u<i+L;++u)
for(int v=j-L;v<j+L;++v)
var += (col[u][v]-mean)*(col[u][v]-mean);
var /= L*L*4;
return var;
};
double var_cur=0;
var_cur += var_col(R);
var_cur += var_col(G);
var_cur += var_col(B);
vars.push_back(var_cur);
}
std::sort(vars.begin(), vars.end());
//return (int)(vars[vars.size()/4]);
//return (int)(green_factor*1000);
if(vars[vars.size()/4] < 3200)
return 2;
else
return 3;
}
else
{ // styles 1 or 4
double variance = 0;
auto var_col = [&](int col[500][500])->double
{
double mean = 0;
for(int u=0;u<H;++u)
for(int v=0;v<W;++v)
mean += col[u][v];
mean /= H*W;
double var = 0;
for(int u=0;u<H;++u)
for(int v=0;v<W;++v)
var += (col[u][v]-mean)*(col[u][v]-mean);
var /= H*W;
return var;
};
variance += var_col(R);
variance += var_col(G);
variance += var_col(B);
if(variance < 10000)
return 1;
else
return 4;
}
return -1;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
59 ms |
4924 KB |
Output isn't correct |
2 |
Incorrect |
69 ms |
5668 KB |
Output isn't correct |
3 |
Correct |
2277 ms |
6448 KB |
Output is correct |
4 |
Correct |
1409 ms |
5868 KB |
Output is correct |
5 |
Correct |
2619 ms |
6908 KB |
Output is correct |
6 |
Incorrect |
47 ms |
4512 KB |
Output isn't correct |
7 |
Incorrect |
36 ms |
4296 KB |
Output isn't correct |
8 |
Incorrect |
75 ms |
5908 KB |
Output isn't correct |
9 |
Correct |
1858 ms |
7356 KB |
Output is correct |
10 |
Incorrect |
41 ms |
3268 KB |
Output isn't correct |
11 |
Incorrect |
57 ms |
4164 KB |
Output isn't correct |
12 |
Correct |
2510 ms |
6732 KB |
Output is correct |
13 |
Correct |
2996 ms |
7168 KB |
Output is correct |
14 |
Correct |
1087 ms |
4288 KB |
Output is correct |
15 |
Correct |
2748 ms |
7104 KB |
Output is correct |
16 |
Incorrect |
60 ms |
5292 KB |
Output isn't correct |
17 |
Correct |
2718 ms |
7448 KB |
Output is correct |
18 |
Correct |
1120 ms |
4128 KB |
Output is correct |
19 |
Incorrect |
2223 ms |
6432 KB |
Output isn't correct |
20 |
Incorrect |
62 ms |
5372 KB |
Output isn't correct |
21 |
Correct |
69 ms |
5384 KB |
Output is correct |
22 |
Correct |
2710 ms |
7544 KB |
Output is correct |
23 |
Correct |
692 ms |
3576 KB |
Output is correct |
24 |
Correct |
72 ms |
5764 KB |
Output is correct |
25 |
Correct |
2740 ms |
7532 KB |
Output is correct |
26 |
Incorrect |
42 ms |
4704 KB |
Output isn't correct |
27 |
Incorrect |
69 ms |
5348 KB |
Output isn't correct |
28 |
Correct |
2492 ms |
6744 KB |
Output is correct |
29 |
Correct |
2700 ms |
7144 KB |
Output is correct |
30 |
Correct |
2605 ms |
6828 KB |
Output is correct |
31 |
Incorrect |
3874 ms |
8156 KB |
Output isn't correct |
32 |
Correct |
60 ms |
5140 KB |
Output is correct |
33 |
Incorrect |
63 ms |
5432 KB |
Output isn't correct |
34 |
Correct |
2062 ms |
7044 KB |
Output is correct |
35 |
Correct |
2724 ms |
7452 KB |
Output is correct |
36 |
Correct |
2673 ms |
6740 KB |
Output is correct |
37 |
Correct |
2180 ms |
6608 KB |
Output is correct |
38 |
Incorrect |
76 ms |
5924 KB |
Output isn't correct |
39 |
Incorrect |
63 ms |
5320 KB |
Output isn't correct |
40 |
Correct |
2568 ms |
6564 KB |
Output is correct |
41 |
Correct |
53 ms |
4980 KB |
Output is correct |
42 |
Correct |
2196 ms |
6544 KB |
Output is correct |
43 |
Incorrect |
76 ms |
6016 KB |
Output isn't correct |
44 |
Correct |
1687 ms |
5116 KB |
Output is correct |
45 |
Incorrect |
82 ms |
5856 KB |
Output isn't correct |
46 |
Correct |
81 ms |
5188 KB |
Output is correct |
47 |
Correct |
2554 ms |
7472 KB |
Output is correct |
48 |
Incorrect |
87 ms |
5868 KB |
Output isn't correct |
49 |
Incorrect |
47 ms |
4744 KB |
Output isn't correct |
50 |
Correct |
2245 ms |
6832 KB |
Output is correct |
51 |
Correct |
76 ms |
5188 KB |
Output is correct |
52 |
Correct |
1644 ms |
4844 KB |
Output is correct |
53 |
Incorrect |
3816 ms |
8072 KB |
Output isn't correct |
54 |
Correct |
67 ms |
5372 KB |
Output is correct |
55 |
Correct |
2499 ms |
7592 KB |
Output is correct |
56 |
Correct |
1627 ms |
5868 KB |
Output is correct |
57 |
Incorrect |
69 ms |
5660 KB |
Output isn't correct |
58 |
Incorrect |
78 ms |
5672 KB |
Output isn't correct |
59 |
Incorrect |
64 ms |
5060 KB |
Output isn't correct |
60 |
Incorrect |
72 ms |
5608 KB |
Output isn't correct |
61 |
Incorrect |
69 ms |
5388 KB |
Output isn't correct |
62 |
Correct |
61 ms |
5140 KB |
Output is correct |
63 |
Correct |
2536 ms |
7608 KB |
Output is correct |
64 |
Correct |
3000 ms |
7112 KB |
Output is correct |
65 |
Incorrect |
63 ms |
4904 KB |
Output isn't correct |
66 |
Incorrect |
55 ms |
5156 KB |
Output isn't correct |
67 |
Correct |
1119 ms |
4404 KB |
Output is correct |
68 |
Correct |
3065 ms |
7136 KB |
Output is correct |
69 |
Incorrect |
19 ms |
3628 KB |
Output isn't correct |
70 |
Correct |
2143 ms |
7272 KB |
Output is correct |
71 |
Incorrect |
76 ms |
6060 KB |
Output isn't correct |
72 |
Correct |
2613 ms |
7296 KB |
Output is correct |
73 |
Correct |
2737 ms |
6800 KB |
Output is correct |
74 |
Correct |
697 ms |
3636 KB |
Output is correct |
75 |
Correct |
2649 ms |
6960 KB |
Output is correct |
76 |
Correct |
2988 ms |
6980 KB |
Output is correct |
77 |
Incorrect |
75 ms |
5788 KB |
Output isn't correct |
78 |
Correct |
2715 ms |
6948 KB |
Output is correct |
79 |
Incorrect |
45 ms |
4592 KB |
Output isn't correct |
80 |
Incorrect |
74 ms |
5468 KB |
Output isn't correct |
81 |
Incorrect |
74 ms |
4300 KB |
Output isn't correct |
82 |
Incorrect |
77 ms |
5640 KB |
Output isn't correct |
83 |
Correct |
260 ms |
1984 KB |
Output is correct |
84 |
Incorrect |
65 ms |
5304 KB |
Output isn't correct |
85 |
Correct |
1687 ms |
5044 KB |
Output is correct |
86 |
Correct |
2584 ms |
7220 KB |
Output is correct |
87 |
Correct |
1769 ms |
5012 KB |
Output is correct |
88 |
Correct |
2149 ms |
6524 KB |
Output is correct |
89 |
Correct |
77 ms |
5928 KB |
Output is correct |
90 |
Correct |
2795 ms |
7656 KB |
Output is correct |
91 |
Correct |
2680 ms |
7212 KB |
Output is correct |
92 |
Correct |
1789 ms |
6272 KB |
Output is correct |
93 |
Incorrect |
50 ms |
4840 KB |
Output isn't correct |
94 |
Incorrect |
48 ms |
4716 KB |
Output isn't correct |
95 |
Correct |
2655 ms |
6736 KB |
Output is correct |
96 |
Correct |
2498 ms |
6464 KB |
Output is correct |
97 |
Correct |
1115 ms |
4252 KB |
Output is correct |
98 |
Incorrect |
49 ms |
4796 KB |
Output isn't correct |
99 |
Incorrect |
66 ms |
5060 KB |
Output isn't correct |
100 |
Correct |
2533 ms |
6612 KB |
Output is correct |
101 |
Correct |
75 ms |
5996 KB |
Output is correct |
102 |
Correct |
736 ms |
3768 KB |
Output is correct |