# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1035755 | andrei_iorgulescu | 미술 수업 (IOI13_artclass) | C++14 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "artclass.h"
#include <bits/stdc++.h>
using namespace std;
int HH,WW;
int const_dif_lejer = 50;
int const_dif_hard = 20;
int RR[505][505],GG[505][505],BB[505][505];
bool similar(int r1, int g1, int b1, int r2, int g2, int b2, int const_dif)
{
if (abs(r1 - r2) > const_dif or abs(g1 - g2) > const_dif or abs(b1 - b2) > const_dif)
return false;
return true;
}
bool sim(int l1, int c1, int l2, int c2)
{
return similar(RR[l1][c1], GG[l1][c1], BB[l1][c1], RR[l2][c2], GG[l2][c2], BB[l2][c2], const_dif_lejer);
}
int dl[] = {-1,0,1,0};
int dc[] = {0,1,0,-1};
bool viz[505][505];
void dfs(int lin, int col)
{
viz[lin][col] = true;
for (int i = 0; i < 4; i++)
{
int nl = lin + dl[i],nc = col + dc[i];
if (nl >= 0 and nl < HH and nc >= 0 and nc < WW and sim(lin,col,nl,nc) and !viz[nl][nc])
dfs(nl,nc);
}
}
bool stil_4()
{
for (int i = 0; i < HH; i++)
for (int j = 0; j < WW; j++)
viz[i][j] = false;
int cc = 0;
for (int i = 0; i < HH; i++)
for (int j = 0; j < WW; j++)
if (!viz[i][j])
cc++,dfs(i,j);
if (cc <= 10)
return true;
return false;
}
bool stil_1()
{
int cntW = 0;
for (int i = 0; i < HH; i++)
for (int j = 0; j < WW; j++)
if (similar(RR[i][j],GG[i][j],BB[i][j],255,255,255))
cntW++;
if (cntW >= HH * WW / 5)
return true;
return false;
}
int style(int H, int W, int R[500][500], int G[500][500], int B[500][500])
{
HH = H;
WW = W;
for (int i = 0; i < H; i++)
for (int j = 0; j < W; j++)
RR[i][j] = R[i][j],GG[i][j] = G[i][j],BB[i][j] = B[i][j];
if (stil_1())
return 1;
if (stil_4())
return 4;
assert(false);
}
/// stil 1 -> exista o culoare, a.i daca ii iau componentele conexe din ea, le marchez ca blocate, componentele ramase o sa fie "uniforme"
/// stil 2 -> pana mea, mult verde s-ar putea crede
/// stil 3 -> kys
/// stil 4 -> putine componente conexe