#include "artclass.h"
#include <bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
template<typename T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
template<typename T, typename U> using ordered_map = tree<T, U, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
typedef long long ll;
typedef long double ld;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef vector<int> vi;
typedef vector<ll> vll;
#define FOR(i,j,k,in) for(int i=(j); i < (k);i+=in)
#define FORD(i,j,k,in) for(int i=(j); i >=(k);i-=in)
#define REP(i,b) FOR(i,0,b,1)
#define REPD(i,b) FORD(i,b,0,1)
#define pb push_back
#define mp make_pair
#define ff first
#define ss second
#define all(x) begin(x), end(x)
#define MANY_TESTS int tcase; cin >> tcase; while(tcase--)
const double EPS = 1e-9;
const int MOD = 1e9+7;
const ll INFF = 1e18;
const int INF = 1e9;
const ld PI = acos((ld)-1);
const vi dy = {1, 0, -1, 0, -1, 1, 1, -1};
const vi dx = {0, 1, 0, -1, -1, 1, -1, 1};
void DBG(){cout << "]" << endl;}
template<typename T, typename ...U> void DBG(const T& head, const U... args){ cout << head << "; "; DBG(args...); }
#define dbg(...) cout << "Line(" << __LINE__ << ") -> [" << #__VA_ARGS__ << "]: [", DBG(__VA_ARGS__);
#define chk() cout << "Check at line(" << __LINE__ << ") hit." << endl;
template<class T, unsigned int U>
ostream& operator<<(ostream& out, const array<T, U> &v){out << "["; REP(i, U) out << v[i] << ", "; out << "]"; return out;}
template <class T, class U>
ostream& operator<<(ostream& out, const pair<T, U> &par) {out << "[" << par.first << ";" << par.second << "]"; return out;}
template <class T>
ostream& operator<<(ostream& out, const set<T> &cont) { out << "{"; for( const auto &x:cont) out << x << ", "; out << "}"; return out; }
template <class T, class U>
ostream& operator<<(ostream& out, const map<T, U> &cont) {out << "{"; for( const auto &x:cont) out << x << ", "; out << "}"; return out; }
template<class T>
ostream& operator<<(ostream& out, const vector<T> &v){ out << "["; REP(i, v.size()) out << v[i] << ", "; out << "]"; return out;}
template<class T>
istream& operator>>(istream& in, vector<T> &v){ for(auto &x : v) in >> x; return in; }
// make functions return [0..1]
int style(int h, int w, int R[500][500], int G[500][500], int B[500][500]) {
auto in_tolerance = [&](int a, int b){
return abs(a - b) < 15;
};
auto similar = [&](array<int, 3> a, array<int, 3> b){
return in_tolerance(a[0],b[0]) && in_tolerance(a[1], b[1]) && in_tolerance(a[2], b[2]);
};
vector<vector<array<int, 3>>> grid(500, vector<array<int,3>>(500));
REP(i, h){
REP(j, w){
grid[i][j] = {R[i][j], G[i][j], B[i][j]};
}
}
auto get_green = [&]()->double{
auto is_green = [&](array<int, 3> px)->double{ // high red and green?
return (px[0] > 125 && px[1] > 125 && px[2] < 100 ? 1 : 0);
};
double cnt = 0;
REP(i, h){
REP(j, w){
cnt += is_green(grid[i][j]);
}
}
return (double)cnt / (double)(h * w);
};
auto get_granularity = [&]()->double{
double res = 0;
REP(i, h){
REP(j, w){
double curr = 0;
REP(sm, 4){
if(dy[sm] < 0 || dx[sm] < 0) continue;
int ny = i + dy[sm];
int nx = j + dx[sm];
if(ny < 0 || ny >= h || nx < 0 || nx >= w) continue;
if(!similar(grid[i][j], grid[ny][nx]))
curr+=1.0;
}
res += curr;
}
}
return res / (double)(h * w * 2);
};
auto similar2 = [&](array<int, 3> a, array<int, 3> b){
int cutoff = 40;
return abs(a[0] - b[0]) < cutoff && abs(a[1] - b[1]) < cutoff && abs(a[2] - b[2]) < cutoff;
};
auto get_components = [&]()->array<double, 2>{ // also count disproportionate components
vector<vector<int>> visited(h, vector<int>(w, -1));
int curr_id = 0;
auto bfs = [&](int row, int col){
queue<array<int, 2>> q;
visited[row][col] = curr_id;
q.push({row, col});
while(!q.empty()){
auto v = q.front();
q.pop();
REP(sm, 4){
int ny = v[0] + dy[sm];
int nx = v[1] + dx[sm];
if(ny < 0 || ny >= h || nx < 0 || nx >= w || visited[ny][nx] != -1 || !similar2(grid[ny][nx], grid[row][col]))
continue;
visited[ny][nx] = curr_id;
q.push({ny, nx});
}
}
};
vector<int> miny(h * w, INF);
vector<int> maxy(h * w, -INF);
vector<int> minx(h * w, INF);
vector<int> maxx(h * w, -INF);
vector<int> cnt(h * w, 0);
REP(i, h){
REP(j, w){
if(visited[i][j] == -1){
bfs(i, j);
curr_id++;
}
}
}
REP(i, h){
REP(j, w){
miny[visited[i][j]] = min(miny[visited[i][j]], i);
maxy[visited[i][j]] = max(maxy[visited[i][j]], i);
minx[visited[i][j]] = min(minx[visited[i][j]], j);
maxx[visited[i][j]] = max(maxx[visited[i][j]], j);
cnt[visited[i][j]]++;
}
}
int components = 0; // only 30+ px; ?
int disproportionate_components = 0;
REP(i, h * w){
if(cnt[i] > 10){
components++;
int s = abs(miny[i] - maxy[i]) * abs(minx[i] - maxx[i]);
double cut = 0.3;
if((double)cnt[i] / s < cut)
disproportionate_components++;
}
}
return {(1.0 * components) / (1.0 * h * w), (1.0 * disproportionate_components)/(1.0 * components)};
};
double p = get_green();
double p2 = get_granularity();
auto v3 = get_components();
if(p2 > 0.25){
// 2 or 3; big granularity
return (rand()%2 == 0 ? 2 : 3);
}
else{
// 1 or 4
return (rand()%2 == 0 ? 1 : 4);
}
return 2;
}
Compilation message
artclass.cpp: In function 'int style(int, int, int (*)[500], int (*)[500], int (*)[500])':
artclass.cpp:161:12: warning: unused variable 'p' [-Wunused-variable]
161 | double p = get_green();
| ^
artclass.cpp:163:10: warning: variable 'v3' set but not used [-Wunused-but-set-variable]
163 | auto v3 = get_components();
| ^~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
69 ms |
12996 KB |
Output is correct |
2 |
Incorrect |
78 ms |
13192 KB |
Output isn't correct |
3 |
Correct |
21 ms |
8068 KB |
Output is correct |
4 |
Incorrect |
67 ms |
12628 KB |
Output isn't correct |
5 |
Incorrect |
55 ms |
11588 KB |
Output isn't correct |
6 |
Correct |
83 ms |
14924 KB |
Output is correct |
7 |
Correct |
90 ms |
13884 KB |
Output is correct |
8 |
Correct |
65 ms |
10364 KB |
Output is correct |
9 |
Correct |
67 ms |
11716 KB |
Output is correct |
10 |
Incorrect |
72 ms |
11588 KB |
Output isn't correct |
11 |
Correct |
41 ms |
10204 KB |
Output is correct |
12 |
Incorrect |
48 ms |
9028 KB |
Output isn't correct |
13 |
Correct |
77 ms |
13836 KB |
Output is correct |
14 |
Correct |
20 ms |
5480 KB |
Output is correct |
15 |
Correct |
72 ms |
13416 KB |
Output is correct |
16 |
Incorrect |
51 ms |
10864 KB |
Output isn't correct |
17 |
Incorrect |
70 ms |
11844 KB |
Output isn't correct |
18 |
Correct |
40 ms |
7756 KB |
Output is correct |
19 |
Incorrect |
86 ms |
14664 KB |
Output isn't correct |
20 |
Incorrect |
85 ms |
14788 KB |
Output isn't correct |
21 |
Correct |
52 ms |
9176 KB |
Output is correct |
22 |
Correct |
61 ms |
10184 KB |
Output is correct |
23 |
Incorrect |
79 ms |
14180 KB |
Output isn't correct |
24 |
Correct |
77 ms |
12356 KB |
Output is correct |
25 |
Correct |
73 ms |
13408 KB |
Output is correct |
26 |
Correct |
69 ms |
12852 KB |
Output is correct |
27 |
Incorrect |
52 ms |
11272 KB |
Output isn't correct |
28 |
Incorrect |
47 ms |
9416 KB |
Output isn't correct |
29 |
Correct |
67 ms |
12720 KB |
Output is correct |
30 |
Incorrect |
85 ms |
14680 KB |
Output isn't correct |
31 |
Correct |
77 ms |
12376 KB |
Output is correct |
32 |
Incorrect |
74 ms |
12164 KB |
Output isn't correct |
33 |
Correct |
41 ms |
7768 KB |
Output is correct |
34 |
Incorrect |
76 ms |
12484 KB |
Output isn't correct |
35 |
Correct |
51 ms |
9028 KB |
Output is correct |
36 |
Incorrect |
66 ms |
12948 KB |
Output isn't correct |
37 |
Correct |
51 ms |
9056 KB |
Output is correct |
38 |
Correct |
50 ms |
11076 KB |
Output is correct |
39 |
Correct |
69 ms |
11524 KB |
Output is correct |
40 |
Incorrect |
100 ms |
12808 KB |
Output isn't correct |
41 |
Incorrect |
68 ms |
11780 KB |
Output isn't correct |
42 |
Incorrect |
77 ms |
12952 KB |
Output isn't correct |
43 |
Correct |
79 ms |
13136 KB |
Output is correct |
44 |
Incorrect |
69 ms |
13124 KB |
Output isn't correct |
45 |
Incorrect |
71 ms |
12228 KB |
Output isn't correct |
46 |
Correct |
57 ms |
11872 KB |
Output is correct |
47 |
Incorrect |
69 ms |
13040 KB |
Output isn't correct |
48 |
Incorrect |
83 ms |
14768 KB |
Output isn't correct |
49 |
Correct |
63 ms |
12124 KB |
Output is correct |
50 |
Incorrect |
69 ms |
11660 KB |
Output isn't correct |
51 |
Correct |
72 ms |
12308 KB |
Output is correct |
52 |
Correct |
74 ms |
12140 KB |
Output is correct |
53 |
Correct |
68 ms |
12996 KB |
Output is correct |
54 |
Correct |
58 ms |
11076 KB |
Output is correct |
55 |
Correct |
65 ms |
11972 KB |
Output is correct |
56 |
Incorrect |
76 ms |
12364 KB |
Output isn't correct |
57 |
Incorrect |
66 ms |
11980 KB |
Output isn't correct |
58 |
Correct |
50 ms |
11076 KB |
Output is correct |
59 |
Incorrect |
85 ms |
14580 KB |
Output isn't correct |
60 |
Incorrect |
64 ms |
11800 KB |
Output isn't correct |
61 |
Incorrect |
81 ms |
14156 KB |
Output isn't correct |
62 |
Correct |
43 ms |
8128 KB |
Output is correct |
63 |
Incorrect |
77 ms |
12716 KB |
Output isn't correct |
64 |
Incorrect |
79 ms |
14148 KB |
Output isn't correct |
65 |
Correct |
58 ms |
11972 KB |
Output is correct |
66 |
Incorrect |
81 ms |
14596 KB |
Output isn't correct |
67 |
Correct |
75 ms |
12832 KB |
Output is correct |
68 |
Incorrect |
84 ms |
14264 KB |
Output isn't correct |
69 |
Incorrect |
72 ms |
12476 KB |
Output isn't correct |
70 |
Incorrect |
83 ms |
14792 KB |
Output isn't correct |
71 |
Correct |
68 ms |
12984 KB |
Output is correct |
72 |
Correct |
69 ms |
13152 KB |
Output is correct |
73 |
Incorrect |
88 ms |
14696 KB |
Output isn't correct |
74 |
Correct |
57 ms |
11584 KB |
Output is correct |
75 |
Incorrect |
77 ms |
12912 KB |
Output isn't correct |
76 |
Correct |
60 ms |
11204 KB |
Output is correct |
77 |
Incorrect |
93 ms |
14744 KB |
Output isn't correct |
78 |
Correct |
77 ms |
13892 KB |
Output is correct |
79 |
Incorrect |
71 ms |
12932 KB |
Output isn't correct |
80 |
Incorrect |
69 ms |
11716 KB |
Output isn't correct |
81 |
Correct |
60 ms |
10448 KB |
Output is correct |
82 |
Correct |
59 ms |
12084 KB |
Output is correct |
83 |
Incorrect |
68 ms |
11716 KB |
Output isn't correct |
84 |
Correct |
84 ms |
12936 KB |
Output is correct |
85 |
Incorrect |
71 ms |
12868 KB |
Output isn't correct |
86 |
Incorrect |
85 ms |
14788 KB |
Output isn't correct |
87 |
Correct |
81 ms |
13252 KB |
Output is correct |
88 |
Incorrect |
73 ms |
13288 KB |
Output isn't correct |
89 |
Incorrect |
73 ms |
12620 KB |
Output isn't correct |
90 |
Incorrect |
74 ms |
12868 KB |
Output isn't correct |
91 |
Incorrect |
72 ms |
12200 KB |
Output isn't correct |
92 |
Correct |
76 ms |
13012 KB |
Output is correct |
93 |
Incorrect |
77 ms |
13272 KB |
Output isn't correct |
94 |
Incorrect |
56 ms |
10516 KB |
Output isn't correct |
95 |
Correct |
74 ms |
13788 KB |
Output is correct |
96 |
Incorrect |
81 ms |
14404 KB |
Output isn't correct |
97 |
Correct |
79 ms |
13492 KB |
Output is correct |
98 |
Correct |
75 ms |
11844 KB |
Output is correct |
99 |
Correct |
62 ms |
10820 KB |
Output is correct |
100 |
Correct |
75 ms |
12824 KB |
Output is correct |
101 |
Correct |
55 ms |
11576 KB |
Output is correct |
102 |
Correct |
69 ms |
13104 KB |
Output is correct |