# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
355184 | talant117408 | 미술 수업 (IOI13_artclass) | C++17 | 87 ms | 24172 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "artclass.h"
#ifndef EVAL
#include "grader.cpp"
#endif
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;
#define precision(n) fixed << setprecision(n)
#define pb push_back
#define ub upper_bound
#define lb lower_bound
#define mp make_pair
#define eps (double)1e-9
#define PI 2*acos(0.0)
#define endl "\n"
#define sz(v) int((v).size())
#define all(v) v.begin(),v.end()
#define rall(v) v.rbegin(),v.rend()
#define do_not_disturb ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define OK cout << "OK" << endl;
int cnt = 1, sr, sg, sb;
int n, m;
int used[501][501], r[501][501], g[501][501], b[501][501];
int movesX[] = {-1, 0, 0, 1}, movesY[] = {0, -1, 1, 0};
bool isEligible(int x, int y){
return x > -1 && x < n && y > -1 && y < m;
}
void dfs(int x, int y){
used[x][y] = cnt;
for(int i = 0; i < 4; i++){
auto nx = x+movesX[i];
auto ny = y+movesY[i];
if(isEligible(nx, ny) && !used[nx][ny] && abs(r[nx][ny]-sr) < 41 && abs(g[nx][ny]-sg) < 41 && abs(b[nx][ny]-sb) < 41){
dfs(nx, ny);
}
}
}
int style(int H, int W, int R[500][500], int G[500][500], int B[500][500]){
n = H; m = W;
int i, j;
for(i = 0; i < n; i++){
for(j = 0; j < m; j++){
r[i][j] = R[i][j];
g[i][j] = G[i][j];
b[i][j] = B[i][j];
}
}
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
if(!used[i][j]){
sr = r[i][j];
sg = g[i][j];
sb = b[i][j];
dfs(i, j);
cnt++;
}
}
}
if(cnt < 300){
int mn[500*500+2][3], mx[500*500+2][3];
memset(mn, 2e9, sizeof(mn));
memset(mx, 0, sizeof(mx));
for(i = 0; i < n; i++){
for(j = 0; j < m; j++){
mn[used[i][j]][0] = min(mn[used[i][j]][0], r[i][j]);
mx[used[i][j]][0] = max(mx[used[i][j]][0], r[i][j]);
mn[used[i][j]][1] = min(mn[used[i][j]][1], g[i][j]);
mx[used[i][j]][1] = max(mx[used[i][j]][1], g[i][j]);
mn[used[i][j]][2] = min(mn[used[i][j]][2], b[i][j]);
mx[used[i][j]][2] = max(mx[used[i][j]][2], b[i][j]);
}
}
int ans = 0;
for(int i = 0; i < 500*500+2; i++){
ans = max(ans, mx[i][0]-mn[i][0]);
ans = max(ans, mx[i][1]-mn[i][1]);
ans = max(ans, mx[i][2]-mn[i][2]);
}
if(ans < 30) return 1;
return 4;
}
else{
double green = 0, red = 0, blue = 0;
for(i = 0; i < n; i++){
for(int j = 0; j < m; j++){
green += g[i][j];
red += r[i][j];
blue += b[i][j];
}
}
green /= double(n*m);
red /= double(n*m);
blue /= double(n*m);
if(green >= red && green >= blue)
return 2;
return 3;
}
}
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |