#include using namespace std; int N,D,P,d,korak,pecat,pomeraj,br; int m[307][307],res[10][307][307],l; bool bio[307][307]; void unos(){ freopen("gerrymandering.in","r",stdin); cin>>N>>D>>P; for(int i=0;i<=N+1;i++) for(int j=0;j<=N+1;j++){ if(i==0 or i==N+1 or j==0 or j==N+1)m[i][j]=-1; else cin>>m[i][j]; } } void resenje(){ freopen("gerrymandering.out","w",stdout); for(int k=1;k<=P;k++){ for(int i=1;i<=N;i++){ for(int j=1;j<=N;j++)printf("%2d ",res[k][i][j]); cout<maxi){ maxi=poj[i]; br=i; } for(int i=1;i<=8;i++)if(maxi==poj[i])x++; if(x>=2)nereseno=true; if(nereseno){sol=0;l=0;} else if(br==trazen){sol++;l=maxi;} return sol; } int rez3X3(){ int pobeda,duzina,skor=0; for(int t=1;t<=P;t++){ pobeda=0,duzina=0; for(int i=1;i<=241;i+=60) for(int j=1;j<=241;j+=60){ pobeda+=D25_skor3X3(i,j,t); duzina+=l; } skor+=float(pobeda*90000)/(float)duzina; } return skor; } void D25_patern2(int r,int k,int sloj){ for(int i=0;i<=19;i++) for(int j=0;j<=119;j++)res[sloj][r+i][k+j]=pecat; for(int i=20;i<=39;i++) for(int j=0;j<=59;j++)res[sloj][r+i][k+j]=pecat; pecat++; for(int i=20;i<=39;i++) for(int j=60;j<=119;j++)res[sloj][r+i][k+j]=pecat; for(int i=40;i<=59;i++) for(int j=0;j<=119;j++)res[sloj][r+i][k+j]=pecat; } int D25_skor3X6(int r,int k,int trazen){ int poj[10],maxi=0,br,sol=0,x=0; bool nereseno=false; for(int i=1;i<=8;i++)poj[i]=0; for(int i=0;i<=19;i++) for(int j=0;j<=119;j++)poj[m[r+i][k+j]]++; for(int i=20;i<=39;i++) for(int j=0;j<=59;j++)poj[m[r+i][k+j]]++; for(int i=1;i<=8;i++) if(poj[i]>maxi){ maxi=poj[i]; br=i; } for(int i=1;i<=8;i++)if(maxi==poj[i])x++; if(x>=2)nereseno=true; if(nereseno){sol=0;l=0;} else if(br==trazen){sol++;l=maxi;} maxi=0,br,x=0; nereseno=false; for(int i=1;i<=8;i++)poj[i]=0; for(int i=20;i<=39;i++) for(int j=60;j<=119;j++)poj[m[r+i][k+j]]++; for(int i=40;i<=59;i++) for(int j=0;j<=119;j++)poj[m[r+i][k+j]]++; for(int i=1;i<=8;i++) if(poj[i]>maxi){ maxi=poj[i]; br=i; } for(int i=1;i<=8;i++)if(maxi==poj[i])x++; if(x>=2)nereseno=true; if(nereseno){sol+=0;l+=0;} else if(br==trazen){sol++;l+=maxi;} return sol; } void popuni(int sloj){ for(int i=1;i<=N;i++){ if(i%2==1){ for(int j=1;j<=N;j++){ if(br==korak){ pecat++; br=0; } res[sloj][i][j]=pecat; br++; } } else{ for(int j=N;j>=1;j--){ if(br==korak){ pecat++; br=0; } res[sloj][i][j]=pecat; br++; } } } } int main(){ unos(); if(D==25){ float skor=0; for(int t=1;t<=P;t++){ int pobednik=0; int duzina=0; pecat=1; for(int i=1;i<=241;i+=60){ D25_patern1(i,241,t); pobednik+=D25_skor3X3(i,241,t); duzina+=l; pecat++; } for(int i=1;i<=241;i+=60){ for(int j=1;j<=121;j+=120){ int prvid=D25_skor3X6(i,j,t); int prvil=l; int drugid=D25_skor3X3(i,j,t); int drugil=l; int trecid=D25_skor3X3(i,j+60,t); int trecil=l; float prvi=(float)(prvid*90000)/(float)prvil; float drugi=2.0*(float)((drugid+trecid)*90000)/(float)(prvil+drugil); if(prvi>=drugi){ duzina+=prvil; pobednik+=prvid; D25_patern2(i,j,t); } else{ duzina+=drugil+trecil; pobednik+=drugid+trecid; D25_patern1(i,j,t); pecat++; D25_patern1(i,j+60,t); } pecat++; } } skor+=(float)(pobednik*90000)/(float)(duzina); } } else{ pecat=1; korak=(N*N)/D; br=0; for(int i=1;i<=P;i++){ pecat=1; korak=(N*N)/D; br=0; popuni(i); } } resenje(); return 0; } /*/ 8 16 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 2 1 1 2 2 2 2 2 2 for(int t=1;t<=P;t++){ pecat=1; for(int i=1;i<=241;i+=60){ for(int j=1;j<=241;j+=60){ D25_patern1(i,j,t); pecat++; } } } /*/