Submission #1825

#TimeUsernameProblemLanguageResultExecution timeMemory
1825aintaArt Class (IOI13_artclass)C++98
93 / 100
154 ms8572 KiB
#include "artclass.h" int abs(int a){ return a<0?-a:a; } int P[501][501],C,Q[250001],h,t,HH,WW,Count[250001]; int Ca[501],Cb[501],Cc[1001],Cd[1001]; struct A{ int r,g,b; }w[501][501]; struct B{ int r,g,b; }o[250001]; void Ins(int x,int y){ P[x][y]=C,Q[++t]=WW*x+y; } int pow2(int a){ return a*a; } void Do(int x,int y){ if(x<0||y<0||x>=HH||y>=WW||P[x][y])return; if(pow2(abs(w[x][y].r-o[C].r))+pow2(abs(w[x][y].g-o[C].g))+pow2(abs(w[x][y].b-o[C].b))>1000)return; return Ins(x,y); } void BFS(int x,int y){ o[C].r=w[x][y].r,o[C].g=w[x][y].g,o[C].b=w[x][y].b; h=t=0; Ins(x,y); while(h<t){ Count[C]++; ++h; x=Q[h]/WW,y=Q[h]%WW; Do(x-1,y); Do(x+1,y); Do(x,y-1); Do(x,y+1); } } int min(int a,int b){ return a<b?a:b; } int style(int H, int W, int R[500][500], int G[500][500], int B[500][500]) { HH=H,WW=W; int i,j,GG=0,BB=0,RR=0; for(i=0;i<H;i++) for(j=0;j<W;j++) w[i][j].r=R[i][j],w[i][j].g=G[i][j],w[i][j].b=B[i][j],GG+=G[i][j],BB+=B[i][j],RR+=R[i][j]; for(i=0;i<H;i++){ for(j=0;j<W;j++){ if(!P[i][j]){ C++; BFS(i,j); } } } int Sa=0,Sb=0,Sc=0,Sd=0; double sc,sd,k,tp; for(i=0;i<H;i++){ for(j=0;j<W;j++){ if(j<W-1 && P[i][j]!=P[i][j+1])Ca[j]++,Sa++; if(i<H-1 && P[i][j]!=P[i+1][j])Cb[i]++,Sb++; if(i<H-1 && j<W-1 && P[i][j]!=P[i+1][j+1])Cc[i+j]++,Sc++; if(i<H-1 && j && P[i][j]!=P[i+1][j-1])Cd[i-j+W-1]++,Sd++; } } Sa/=W,Sb/=H,sc=Sc,sd=Sd,k=(H-1)*(W-1); sc/=k,sd/=k; int C1=0,C2=0,C3=0,C4=0,C5=0,C6=0,C7=0,C8=0; for(i=0;i<W-1;i++){ if(Ca[i]-Sa>=H/3){ C1++; if(i>=W/7 && i<= 6*W/7) C5++; } } for(i=0;i<H-1;i++){ if(Cb[i]-Sb>=W/3){ C2++; if(i>=H/7 && i<= 6*H/7) C6++; } } int aa=0,bb=0,cc=0,dd=0; for(i=0;i<H+W-1;i++){ tp=Cc[i],k=aa-cc+1; aa++,dd++; if(aa==W)aa--,bb++; if(dd==H)dd--,cc++; if(k<min(H,W)/7)continue; if(tp/k>sc+0.5){ C7++; } } for(i=0;i<H+W-1;i++){ tp=Cd[i],k=aa-cc+1; aa++,dd++; if(aa==W)aa--,bb++; if(dd==H)dd--,cc++; if(k<min(H,W)/7)continue; if(tp/k>sd+0.5){ C8++; } } if(C7||C8)return 1; if(C1>1 || C2>1){ if(C5==0 || C6==0)return 4; return 1; } if(Sa<W*2/3 && Sb<H*2/3)return 2; return 3; }

Compilation message (stderr)

artclass.cpp: In function 'int style(int, int, int (*)[500], int (*)[500], int (*)[500])':
artclass.cpp:68:16: warning: unused variable 'C3' [-Wunused-variable]
  int C1=0,C2=0,C3=0,C4=0,C5=0,C6=0,C7=0,C8=0;
                ^~
artclass.cpp:68:21: warning: unused variable 'C4' [-Wunused-variable]
  int C1=0,C2=0,C3=0,C4=0,C5=0,C6=0,C7=0,C8=0;
                     ^~
#Verdict Execution timeMemoryGrader output
Fetching results...