#include "artclass.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long int lld;
typedef long double lf;
int h, w;
int r[500][500], g[500][500], b[500][500];
lf calc_green(){
lld res = 0;
for(int i=0;i<h;i++){
for(int j=0;j<w;j++){
res += (g[i][j]-r[i][j]);
res += (g[i][j]-b[i][j]);
res += 2*(255-r[i][j]);
res += 2*(255-b[i][j]);
}
}
return ((lf) res)/((lf)(h*w));
}
lf calc_white(){
lld res = 0;
for(int i=0;i<h;i++){
for(int j=0;j<w;j++){
if(r[i][j]>165&&g[i][j]>165&&b[i][j]>165) res++;
}
}
return ((lf) res)/((lf)(h*w));
}
lf calc_global_noise(){
lld res = 0;
for(int i=0;i<h;i++){
for(int j=0;j<w;j++){
for(int ii=max(i-5,0);ii<=min(i+5, h-1);ii++){
for(int jj=max(j-5,0);jj<=min(j+5, w-1);jj++){
res += (g[ii][jj]-g[i][j])*(g[ii][jj]-g[i][j]);
res += (r[ii][jj]-r[i][j])*(r[ii][jj]-r[i][j]);
res += (b[ii][jj]-b[i][j])*(b[ii][jj]-b[i][j]);
}
}
}
}
return ((lf) res)/((lf)(h*w));
}
lf calc_local_noise(){
lld res = 0;
for(int i=0;i<h;i++){
for(int j=0;j<w;j++){
for(int ii=max(i-1,0);ii<=min(i+1, h-1);ii++){
for(int jj=max(j-1,0);jj<=min(j+1, w-1);jj++){
res += (g[ii][jj]-g[i][j])*(g[ii][jj]-g[i][j]);
res += (r[ii][jj]-r[i][j])*(r[ii][jj]-r[i][j]);
res += (b[ii][jj]-b[i][j])*(b[ii][jj]-b[i][j]);
}
}
}
}
return ((lf) res)/((lf)(h*w));
}
lf calc_diff(){
set<pair<pair<int, int>, int>> used;
for(int i=0;i<h;i++){
for(int j=0;j<w;j++){
used.insert({{r[i][j]/10, g[i][j]/10}, b[i][j]/10});
}
}
lld res = (lld) used.size();
return ((lf) res);
}
bool visited[500][500];
const int dx[8] = {1,0,-1,0,-1,1,-1,1}, dy[8] = {0,1,0,-1,-1,-1,1,1};
const int CLOSE = 20;
void bfs(int inix, int iniy){
queue<pair<int, int>> q;
q.push({inix,iniy});
visited[inix][iniy];
int x,y;
while(!q.empty()){
auto now = q.front(); q.pop();
x = now.first; y = now.second;
int newx, newy;
for(int i=0;i<8;i++){
newx = x+dx[i]; newy = y+dy[i];
if(newx<0||newx>=h||newy<0||newy>=w) continue;
if(abs(r[x][y]-r[newx][newy])>CLOSE||abs(g[x][y]-g[newx][newy])>CLOSE||abs(b[x][y]-b[newx][newy])>CLOSE) continue;
if(visited[newx][newy]) continue;
visited[newx][newy] = true;
q.push({newx, newy});
}
}
return;
}
lf calc_comps(){
memset(visited, false, sizeof visited);
lld res = 0;
for(int i=0;i<h;i++){
for(int j=0;j<w;j++){
if(!visited[i][j]){
bfs(i, j);
res++;
}
}
}
return 10000.00000000*((lf) res)/((lf)(h*w));
}
int style(int _H, int _W, int _R[500][500], int _G[500][500], int _B[500][500]){
h = _H; w = _W;
for(int i=0;i<h;i++){
for(int j=0;j<w;j++){
r[i][j] = _R[i][j]; g[i][j] = _G[i][j]; b[i][j] = _B[i][j];
}
}
lf green = calc_green();
lf white = calc_white();
lf global_noise = calc_global_noise();
lf local_noise = calc_local_noise();
lf comps = calc_comps();
//lf diff = calc_diff();
//cout << comps << endl;
if(global_noise<200000&&local_noise<2000) return 4;
if(global_noise>500000&&local_noise>12500&&comps>300) return 3;
if(green*(1-white)>450) return 2;
return 1;
}
Compilation message
artclass.cpp: In function 'void bfs(int, int)':
artclass.cpp:83:20: warning: statement has no effect [-Wunused-value]
83 | visited[inix][iniy];
| ~~~~~~~~~~~~~~~~~~^
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
106 ms |
6800 KB |
Output is correct |
2 |
Correct |
71 ms |
7840 KB |
Output is correct |
3 |
Correct |
118 ms |
9024 KB |
Output is correct |
4 |
Correct |
124 ms |
8652 KB |
Output is correct |
5 |
Incorrect |
29 ms |
6820 KB |
Output isn't correct |
6 |
Correct |
27 ms |
2252 KB |
Output is correct |
7 |
Correct |
84 ms |
5720 KB |
Output is correct |
8 |
Correct |
88 ms |
6192 KB |
Output is correct |
9 |
Correct |
104 ms |
7148 KB |
Output is correct |
10 |
Correct |
108 ms |
7568 KB |
Output is correct |
11 |
Correct |
114 ms |
8876 KB |
Output is correct |
12 |
Correct |
110 ms |
7312 KB |
Output is correct |
13 |
Correct |
77 ms |
7948 KB |
Output is correct |
14 |
Correct |
109 ms |
8396 KB |
Output is correct |
15 |
Correct |
104 ms |
8524 KB |
Output is correct |
16 |
Correct |
115 ms |
8548 KB |
Output is correct |
17 |
Correct |
98 ms |
8456 KB |
Output is correct |
18 |
Correct |
110 ms |
8520 KB |
Output is correct |
19 |
Correct |
80 ms |
5984 KB |
Output is correct |
20 |
Correct |
86 ms |
7968 KB |
Output is correct |
21 |
Correct |
85 ms |
5904 KB |
Output is correct |
22 |
Correct |
60 ms |
7456 KB |
Output is correct |
23 |
Correct |
115 ms |
8860 KB |
Output is correct |
24 |
Correct |
118 ms |
8780 KB |
Output is correct |
25 |
Correct |
80 ms |
8140 KB |
Output is correct |
26 |
Correct |
114 ms |
7588 KB |
Output is correct |
27 |
Correct |
106 ms |
7608 KB |
Output is correct |
28 |
Correct |
102 ms |
8468 KB |
Output is correct |
29 |
Correct |
94 ms |
8224 KB |
Output is correct |
30 |
Correct |
68 ms |
4860 KB |
Output is correct |
31 |
Correct |
83 ms |
8140 KB |
Output is correct |
32 |
Correct |
89 ms |
5664 KB |
Output is correct |
33 |
Correct |
97 ms |
6976 KB |
Output is correct |
34 |
Correct |
104 ms |
8572 KB |
Output is correct |
35 |
Correct |
116 ms |
7244 KB |
Output is correct |
36 |
Incorrect |
96 ms |
6732 KB |
Output isn't correct |
37 |
Correct |
106 ms |
8412 KB |
Output is correct |
38 |
Correct |
92 ms |
6732 KB |
Output is correct |
39 |
Correct |
87 ms |
7956 KB |
Output is correct |
40 |
Correct |
60 ms |
4144 KB |
Output is correct |
41 |
Correct |
96 ms |
6828 KB |
Output is correct |
42 |
Correct |
100 ms |
8376 KB |
Output is correct |
43 |
Correct |
123 ms |
9036 KB |
Output is correct |
44 |
Correct |
70 ms |
4772 KB |
Output is correct |
45 |
Correct |
108 ms |
7984 KB |
Output is correct |
46 |
Correct |
114 ms |
7748 KB |
Output is correct |
47 |
Correct |
119 ms |
9212 KB |
Output is correct |
48 |
Correct |
102 ms |
8908 KB |
Output is correct |
49 |
Correct |
105 ms |
7492 KB |
Output is correct |
50 |
Correct |
105 ms |
7228 KB |
Output is correct |
51 |
Correct |
100 ms |
6852 KB |
Output is correct |
52 |
Correct |
100 ms |
8204 KB |
Output is correct |
53 |
Correct |
117 ms |
9048 KB |
Output is correct |
54 |
Correct |
122 ms |
9004 KB |
Output is correct |
55 |
Correct |
95 ms |
8104 KB |
Output is correct |
56 |
Incorrect |
123 ms |
9036 KB |
Output isn't correct |
57 |
Correct |
109 ms |
8524 KB |
Output is correct |
58 |
Correct |
102 ms |
7352 KB |
Output is correct |
59 |
Correct |
96 ms |
8356 KB |
Output is correct |
60 |
Correct |
71 ms |
7816 KB |
Output is correct |
61 |
Correct |
78 ms |
7940 KB |
Output is correct |
62 |
Correct |
56 ms |
3780 KB |
Output is correct |
63 |
Correct |
100 ms |
8440 KB |
Output is correct |
64 |
Correct |
111 ms |
7372 KB |
Output is correct |
65 |
Correct |
109 ms |
8804 KB |
Output is correct |
66 |
Correct |
122 ms |
9036 KB |
Output is correct |
67 |
Correct |
107 ms |
8236 KB |
Output is correct |
68 |
Correct |
93 ms |
6988 KB |
Output is correct |
69 |
Correct |
112 ms |
8808 KB |
Output is correct |
70 |
Correct |
97 ms |
8396 KB |
Output is correct |
71 |
Correct |
93 ms |
8172 KB |
Output is correct |
72 |
Correct |
102 ms |
7408 KB |
Output is correct |
73 |
Correct |
76 ms |
7988 KB |
Output is correct |
74 |
Incorrect |
99 ms |
6768 KB |
Output isn't correct |
75 |
Correct |
78 ms |
7828 KB |
Output is correct |
76 |
Correct |
99 ms |
6788 KB |
Output is correct |
77 |
Correct |
103 ms |
8084 KB |
Output is correct |
78 |
Correct |
112 ms |
8564 KB |
Output is correct |
79 |
Correct |
103 ms |
7192 KB |
Output is correct |
80 |
Correct |
83 ms |
7904 KB |
Output is correct |
81 |
Correct |
126 ms |
8960 KB |
Output is correct |
82 |
Correct |
105 ms |
8512 KB |
Output is correct |
83 |
Correct |
103 ms |
8356 KB |
Output is correct |
84 |
Correct |
70 ms |
4804 KB |
Output is correct |
85 |
Correct |
115 ms |
9292 KB |
Output is correct |
86 |
Correct |
73 ms |
4752 KB |
Output is correct |
87 |
Correct |
124 ms |
9128 KB |
Output is correct |
88 |
Correct |
121 ms |
8672 KB |
Output is correct |
89 |
Correct |
102 ms |
8468 KB |
Output is correct |
90 |
Correct |
56 ms |
3868 KB |
Output is correct |
91 |
Correct |
86 ms |
8332 KB |
Output is correct |
92 |
Correct |
66 ms |
7804 KB |
Output is correct |
93 |
Correct |
101 ms |
6820 KB |
Output is correct |
94 |
Correct |
95 ms |
6776 KB |
Output is correct |
95 |
Incorrect |
111 ms |
7704 KB |
Output isn't correct |
96 |
Correct |
111 ms |
8556 KB |
Output is correct |
97 |
Correct |
104 ms |
8444 KB |
Output is correct |
98 |
Correct |
115 ms |
8436 KB |
Output is correct |
99 |
Correct |
96 ms |
8476 KB |
Output is correct |
100 |
Incorrect |
128 ms |
9032 KB |
Output isn't correct |
101 |
Correct |
74 ms |
5200 KB |
Output is correct |
102 |
Correct |
97 ms |
7076 KB |
Output is correct |