CodeChef submission 108893 (C++ 4.0.0-8) plaintext list. Status: AC, problem HX, contest OCT09. By ron (Surendra), 2009-10-11 14:55:51.
/* SURENDRA KUMAR MEENA */ #include <vector> #include <list> #include <map> #include <set> #include <deque> #include <stack> #include <bitset> #include <algorithm> #include <functional> #include <numeric> #include <utility> #include <queue> #include <sstream> #include <iostream> #include <iomanip> #include <cstdio> #include <cmath> #include <cstring> #include <cstdlib> #include <ctime> using namespace std; #define R(i,m,n) for(int i=m;i>=n;i--) #define FF(i,m,n) for(int i=m;i<n;i++) #define F(i,n) FF(i,0,n) #define CLR(s,v) memset(s,v,sizeof(s)) #define S(t) scanf("%d",&t) double a[2010][2010]; double Val[10]; char out[10000000]; char b[2010]; char b2[2010]; char b3[2010]; char b4[2010]; const char T4[3]={'0','1','1'}; char b5[2010]; const char T5[3]={'1','0','1'}; char b6[2010]; const char T6[3]={'1','1','0'}; char b7[2010]; const char T7[5]={'1','0','1','1','0'}; char b8[2010]; const char T8[5]={'1','1','0','1','0'}; char b9[2010]; const char T9[8]={'1','0','1','1','0','1','1','1'}; char b10[2010]; const char T10[6]={'1','0','0','1','1','0'}; char b11[2010]; char b12[2010]; int ot; char s[10][2010][2010]; int n; double v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,v14,v15,v16,v17,v18,v19,v20,v21,v22,v23,v24; void Print(int pos){ cout<<" *************** OUTPUT "<<pos<<" **********\n"; F(i,n){ F(j,n) cout<<s[pos][i][j]; cout<<endl; } cout<<" ***************END OF OUTPUT **********\n"; } bool ToBeSet(int pos,int& i,int &j){ v1=v2=0; if(i%2){ if(s[pos][i-1][j]=='1') v1+=a[i-1][j]*a[i][j]; else v2+=a[i-1][j]*a[i][j]; if(i+1<n){ if(s[pos][i+1][j]=='1') v1+=a[i+1][j]*a[i][j]; else v2+=a[i+1][j]*a[i][j]; } if(j+1<n){ if(s[pos][i-1][j+1]=='1') v1+=a[i-1][j+1]*a[i][j]; else v2+=a[i-1][j+1]*a[i][j]; if(i+1<n){ if(s[pos][i+1][j+1]=='1') v1+=a[i+1][j+1]*a[i][j]; else v2+=a[i+1][j+1]*a[i][j]; } } } else{ if(i){ if(s[pos][i-1][j]=='1') v1+=a[i-1][j]*a[i][j]; else v2+=a[i-1][j]*a[i][j]; if(j-1>=0){ if(s[pos][i-1][j-1]=='1') v1+=a[i-1][j-1]*a[i][j]; else v2+=a[i-1][j-1]*a[i][j]; } } if(i+1<n){ if(s[pos][i+1][j]=='1') v1+=a[i+1][j]*a[i][j]; else v2+=a[i+1][j]*a[i][j]; if(j-1>=0){ if(s[pos][i+1][j-1]=='1') v1+=a[i+1][j-1]*a[i][j]; else v2+=a[i+1][j-1]*a[i][j]; } } } if(j-1>=0){ if(s[pos][i][j-1]=='1') v1+=a[i][j-1]*a[i][j]; else v2+=a[i][j-1]*a[i][j]; } if(j+1<n){ if(s[pos][i][j+1]=='1') v1+=a[i][j+1]*a[i][j]; else v2+=a[i][j+1]*a[i][j]; } return (v1>v2?0:1); } void ToGood(int pos){ F(i,n){ F(j,n){ if(ToBeSet(pos,i,j)) s[pos][i][j]='1'; else s[pos][i][j]='0'; } } } void ToGood2(int pos){ R(i,n-1,0){ R(j,n-1,0){ if(ToBeSet(pos,i,j)) s[pos][i][j]='1'; else s[pos][i][j]='0'; } } } void ToGood3(int pos){ F(j,n){ F(i,n){ if(ToBeSet(pos,i,j)) s[pos][i][j]='1'; else s[pos][i][j]='0'; } } } double Calc(int pos){ double ret=0; F(i,n)F(j,n){ if(i%2){ if(s[pos][i-1][j]==s[pos][i][j]) ret+=a[i-1][j]*a[i][j]; if(j+1<n && s[pos][i-1][j+1]==s[pos][i][j]) ret+=a[i-1][j+1]*a[i][j]; } else if(i){ if(s[pos][i-1][j]==s[pos][i][j]) ret+=a[i-1][j]*a[i][j]; if(j-1>=0 && s[pos][i-1][j-1]==s[pos][i][j]) ret+=a[i-1][j-1]*a[i][j]; } if(j-1>=0 && s[pos][i][j-1]==s[pos][i][j]) ret+=a[i][j-1]*a[i][j]; } return ret; } double fn0(){ int r; double mn; F(j,n) s[0][0][j]=((j%2)?'1':'0'); FF(i,1,n){ v1=v2=v3=v4=v5=v6=v7=v8=v9=v10=v11=v12=v13=v14=v15=v16=v17=v18=v19=v20=v21=v22=v23=v24=0; F(j,n){ if(i%2){ if(s[0][i-1][j]==b[j]) v1+=a[i-1][j]*a[i][j]; else v2+=a[i-1][j]*a[i][j]; if(j+1<n){ if(s[0][i-1][j+1]==b[j]) v1+=a[i-1][j+1]*a[i][j]; else v2+=a[i-1][j+1]*a[i][j]; } } else{ if(s[0][i-1][j]==b[j]) v1+=a[i-1][j]*a[i][j]; else v2+=a[i-1][j]*a[i][j]; if(j-1>=0){ if(s[0][i-1][j-1]==b[j]) v1+=a[i-1][j-1]*a[i][j]; else v2+=a[i-1][j-1]*a[i][j]; } } if(j){ if(s[0][i][j-1]==b[j]) v1+=a[i][j-1]*a[i][j]; else v2+=a[i][j-1]*a[i][j]; } //b2... if(i%2){ if(s[0][i-1][j]==b2[j]) v3+=a[i-1][j]*a[i][j]; else v4+=a[i-1][j]*a[i][j]; if(j+1<n){ if(s[0][i-1][j+1]==b2[j]) v3+=a[i-1][j+1]*a[i][j]; else v4+=a[i-1][j+1]*a[i][j]; } } else{ if(s[0][i-1][j]==b2[j]) v3+=a[i-1][j]*a[i][j]; else v4+=a[i-1][j]*a[i][j]; if(j-1>=0){ if(s[0][i-1][j-1]==b2[j]) v3+=a[i-1][j-1]*a[i][j]; else v4+=a[i-1][j-1]*a[i][j]; } } if(j){ if(s[0][i][j-1]==b2[j]) v3+=a[i][j-1]*a[i][j]; else v4+=a[i][j-1]*a[i][j]; } //b3... if(i%2){ if(s[0][i-1][j]==b3[j]) v5+=a[i-1][j]*a[i][j]; else v6+=a[i-1][j]*a[i][j]; if(j+1<n){ if(s[0][i-1][j+1]==b3[j]) v5+=a[i-1][j+1]*a[i][j]; else v6+=a[i-1][j+1]*a[i][j]; } } else{ if(s[0][i-1][j]==b3[j]) v5+=a[i-1][j]*a[i][j]; else v6+=a[i-1][j]*a[i][j]; if(j-1>=0){ if(s[0][i-1][j-1]==b3[j]) v5+=a[i-1][j-1]*a[i][j]; else v6+=a[i-1][j-1]*a[i][j]; } } if(j){ if(s[0][i][j-1]==b3[j]) v5+=a[i][j-1]*a[i][j]; else v6+=a[i][j-1]*a[i][j]; } //b4... if(i%2){ if(s[0][i-1][j]==b4[j]) v7+=a[i-1][j]*a[i][j]; else v8+=a[i-1][j]*a[i][j]; if(j+1<n){ if(s[0][i-1][j+1]==b4[j]) v7+=a[i-1][j+1]*a[i][j]; else v8+=a[i-1][j+1]*a[i][j]; } } else{ if(s[0][i-1][j]==b4[j]) v7+=a[i-1][j]*a[i][j]; else v8+=a[i-1][j]*a[i][j]; if(j-1>=0){ if(s[0][i-1][j-1]==b4[j]) v7+=a[i-1][j-1]*a[i][j]; else v8+=a[i-1][j-1]*a[i][j]; } } if(j){ if(s[0][i][j-1]==b4[j]) v7+=a[i][j-1]*a[i][j]; else v8+=a[i][j-1]*a[i][j]; } //b5... if(i%2){ if(s[0][i-1][j]==b5[j]) v9+=a[i-1][j]*a[i][j]; else v10+=a[i-1][j]*a[i][j]; if(j+1<n){ if(s[0][i-1][j+1]==b5[j]) v9+=a[i-1][j+1]*a[i][j]; else v10+=a[i-1][j+1]*a[i][j]; } } else{ if(s[0][i-1][j]==b5[j]) v9+=a[i-1][j]*a[i][j]; else v10+=a[i-1][j]*a[i][j]; if(j-1>=0){ if(s[0][i-1][j-1]==b5[j]) v9+=a[i-1][j-1]*a[i][j]; else v10+=a[i-1][j-1]*a[i][j]; } } if(j){ if(s[0][i][j-1]==b5[j]) v9+=a[i][j-1]*a[i][j]; else v10+=a[i][j-1]*a[i][j]; } //b6... if(i%2){ if(s[0][i-1][j]==b6[j]) v11+=a[i-1][j]*a[i][j]; else v12+=a[i-1][j]*a[i][j]; if(j+1<n){ if(s[0][i-1][j+1]==b6[j]) v11+=a[i-1][j+1]*a[i][j]; else v12+=a[i-1][j+1]*a[i][j]; } } else{ if(s[0][i-1][j]==b6[j]) v11+=a[i-1][j]*a[i][j]; else v12+=a[i-1][j]*a[i][j]; if(j-1>=0){ if(s[0][i-1][j-1]==b6[j]) v11+=a[i-1][j-1]*a[i][j]; else v12+=a[i-1][j-1]*a[i][j]; } } if(j){ if(s[0][i][j-1]==b6[j]) v11+=a[i][j-1]*a[i][j]; else v12+=a[i][j-1]*a[i][j]; } //b7... if(i%2){ if(s[0][i-1][j]==b7[j]) v13+=a[i-1][j]*a[i][j]; else v14+=a[i-1][j]*a[i][j]; if(j+1<n){ if(s[0][i-1][j+1]==b7[j]) v13+=a[i-1][j+1]*a[i][j]; else v14+=a[i-1][j+1]*a[i][j]; } } else{ if(s[0][i-1][j]==b7[j]) v13+=a[i-1][j]*a[i][j]; else v14+=a[i-1][j]*a[i][j]; if(j-1>=0){ if(s[0][i-1][j-1]==b7[j]) v13+=a[i-1][j-1]*a[i][j]; else v14+=a[i-1][j-1]*a[i][j]; } } if(j){ if(s[0][i][j-1]==b7[j]) v13+=a[i][j-1]*a[i][j]; else v14+=a[i][j-1]*a[i][j]; } //b8... if(i%2){ if(s[0][i-1][j]==b8[j]) v15+=a[i-1][j]*a[i][j]; else v16+=a[i-1][j]*a[i][j]; if(j+1<n){ if(s[0][i-1][j+1]==b8[j]) v15+=a[i-1][j+1]*a[i][j]; else v16+=a[i-1][j+1]*a[i][j]; } } else{ if(s[0][i-1][j]==b8[j]) v15+=a[i-1][j]*a[i][j]; else v16+=a[i-1][j]*a[i][j]; if(j-1>=0){ if(s[0][i-1][j-1]==b8[j]) v15+=a[i-1][j-1]*a[i][j]; else v16+=a[i-1][j-1]*a[i][j]; } } if(j){ if(s[0][i][j-1]==b8[j]) v15+=a[i][j-1]*a[i][j]; else v16+=a[i][j-1]*a[i][j]; } //b9... if(i%2){ if(s[0][i-1][j]==b9[j]) v17+=a[i-1][j]*a[i][j]; else v18+=a[i-1][j]*a[i][j]; if(j+1<n){ if(s[0][i-1][j+1]==b9[j]) v17+=a[i-1][j+1]*a[i][j]; else v18+=a[i-1][j+1]*a[i][j]; } } else{ if(s[0][i-1][j]==b9[j]) v17+=a[i-1][j]*a[i][j]; else v18+=a[i-1][j]*a[i][j]; if(j-1>=0){ if(s[0][i-1][j-1]==b9[j]) v17+=a[i-1][j-1]*a[i][j]; else v18+=a[i-1][j-1]*a[i][j]; } } if(j){ if(s[0][i][j-1]==b9[j]) v17+=a[i][j-1]*a[i][j]; else v18+=a[i][j-1]*a[i][j]; } //b10... if(i%2){ if(s[0][i-1][j]==b10[j]) v19+=a[i-1][j]*a[i][j]; else v20+=a[i-1][j]*a[i][j]; if(j+1<n){ if(s[0][i-1][j+1]==b10[j]) v19+=a[i-1][j+1]*a[i][j]; else v20+=a[i-1][j+1]*a[i][j]; } } else{ if(s[0][i-1][j]==b10[j]) v19+=a[i-1][j]*a[i][j]; else v20+=a[i-1][j]*a[i][j]; if(j-1>=0){ if(s[0][i-1][j-1]==b10[j]) v19+=a[i-1][j-1]*a[i][j]; else v20+=a[i-1][j-1]*a[i][j]; } } if(j){ if(s[0][i][j-1]==b10[j]) v19+=a[i][j-1]*a[i][j]; else v20+=a[i][j-1]*a[i][j]; } //b11... if(i%2){ if(s[0][i-1][j]==b11[j]) v21+=a[i-1][j]*a[i][j]; else v22+=a[i-1][j]*a[i][j]; if(j+1<n){ if(s[0][i-1][j+1]==b11[j]) v21+=a[i-1][j+1]*a[i][j]; else v22+=a[i-1][j+1]*a[i][j]; } } else{ if(s[0][i-1][j]==b11[j]) v21+=a[i-1][j]*a[i][j]; else v22+=a[i-1][j]*a[i][j]; if(j-1>=0){ if(s[0][i-1][j-1]==b11[j]) v21+=a[i-1][j-1]*a[i][j]; else v22+=a[i-1][j-1]*a[i][j]; } } if(j){ if(s[0][i][j-1]==b11[j]) v21+=a[i][j-1]*a[i][j]; else v22+=a[i][j-1]*a[i][j]; } //b12... if(i%2){ if(s[0][i-1][j]==b12[j]) v23+=a[i-1][j]*a[i][j]; else v24+=a[i-1][j]*a[i][j]; if(j+1<n){ if(s[0][i-1][j+1]==b12[j]) v23+=a[i-1][j+1]*a[i][j]; else v24+=a[i-1][j+1]*a[i][j]; } } else{ if(s[0][i-1][j]==b12[j]) v23+=a[i-1][j]*a[i][j]; else v24+=a[i-1][j]*a[i][j]; if(j-1>=0){ if(s[0][i-1][j-1]==b12[j]) v23+=a[i-1][j-1]*a[i][j]; else v24+=a[i-1][j-1]*a[i][j]; } } if(j){ if(s[0][i][j-1]==b12[j]) v23+=a[i][j-1]*a[i][j]; else v24+=a[i][j-1]*a[i][j]; } } r=1; //b... mn=v1; if(v2<mn){ mn=v2; r=2; } //b2... if(v3<mn){ mn=v3; r=3; } if(v4<mn){ mn=v4; r=4; } //b3... if(v5<mn){ mn=v5; r=5; } if(v6<mn){ mn=v6; r=6; } //b4... if(v7<mn){ mn=v7; r=7; } if(v8<mn){ mn=v8; r=8; } //b5... if(v9<mn){ mn=v9; r=9; } if(v10<mn){ mn=v10; r=10; } //b6... if(v11<mn){ mn=v11; r=11; } if(v12<mn){ mn=v12; r=12; } //b7... if(v13<mn){ mn=v13; r=13; } if(v14<mn){ mn=v14; r=14; } //b8... if(v15<mn){ mn=v15; r=15; } if(v16<mn){ mn=v16; r=16; } /* //b9... if(v17<mn){ mn=v17; r=17; } if(v18<mn){ mn=v18; r=18; }*/ //b10... if(v19<mn){ mn=v19; r=19; } if(v20<mn){ mn=v20; r=20; } //b11... if(v21<mn){ mn=v21; r=21; } if(v22<mn){ mn=v22; r=22; } //b12... if(v23<mn){ mn=v23; r=23; } if(v24<mn){ mn=v24; r=24; } //b... if(r==1) F(j,n) s[0][i][j]=b[j]; else if(r==2) F(j,n) s[0][i][j]=(b[j]=='1'?'0':'1'); //b2... else if(r==3) F(j,n) s[0][i][j]=b2[j]; else if(r==4) F(j,n) s[0][i][j]=(b2[j]=='1'?'0':'1'); //b3... else if(r==5) F(j,n) s[0][i][j]=b3[j]; else if(r==6) F(j,n) s[0][i][j]=(b3[j]=='1'?'0':'1'); // else F(j,n) s[0][i][j]=(b3[j]=='1'?'0':'1'); //b4... else if(r==7) F(j,n) s[0][i][j]=b4[j]; else if(r==8) F(j,n) s[0][i][j]=(b4[j]=='1'?'0':'1'); // else F(j,n) s[0][i][j]=(b4[j]=='1'?'0':'1'); //b5... else if(r==9) F(j,n) s[0][i][j]=b5[j]; else if(r==10) F(j,n) s[0][i][j]=(b5[j]=='1'?'0':'1'); //b6... else if(r==11) F(j,n) s[0][i][j]=b6[j]; else if(r==12) F(j,n) s[0][i][j]=(b6[j]=='1'?'0':'1'); //b7... else if(r==13) F(j,n) s[0][i][j]=b7[j]; else if(r==14) F(j,n) s[0][i][j]=(b7[j]=='1'?'0':'1'); //b8... else if(r==15) F(j,n) s[0][i][j]=b8[j]; else if(r==16) F(j,n) s[0][i][j]=(b8[j]=='1'?'0':'1'); /* //b9... else if(r==17) F(j,n) s[0][i][j]=b9[j]; else if(r==18) F(j,n) s[0][i][j]=(b9[j]=='1'?'0':'1');*/ //b10... else if(r==19) F(j,n) s[0][i][j]=b10[j]; else if(r==20) F(j,n) s[0][i][j]=(b10[j]=='1'?'0':'1'); //b11... else if(r==21) F(j,n) s[0][i][j]=b11[j]; else if(r==22) F(j,n) s[0][i][j]=(b11[j]=='1'?'0':'1'); //b12... else if(r==23) F(j,n) s[0][i][j]=b12[j]; else F(j,n) s[0][i][j]=(b12[j]=='1'?'0':'1'); } F(i,3) ToGood(0); if(n<1600) ToGood(0); if(n<1200) ToGood(0); return 0; } double fn1(){ F(i,n)F(j,n){ if(i%2==0){ if(j%2==0) s[1][i][j]='1'; else s[1][i][j]='0'; } else s[1][i][j]='1'; } F(i,4) ToGood2(1); if(n<1600) ToGood2(1); //if(n<1200) return 0; // return Calc(1); } double fn2(){ F(i,n)F(j,n){ if((i+j)%2) s[2][i][j]='1'; else s[2][i][j]='0'; } F(i,4) ToGood(2); if(n<1200) ToGood(2); return 0; // return Calc(2); } double fn3(){ F(i,n)F(j,n) s[3][i][j]='1'; ToGood2(3); ToGood(3); ToGood2(3); ToGood(3); if(n<1600) ToGood2(3); return 0; // return Calc(3); } double fn(int k){ switch(k){ case 0: return fn0(); case 1: return fn1(); case 2: return fn2(); case 3: return fn3(); // case 4: return fn4(); } return 0; } void Prep(){ int kk=0; F(j,n){ if(j%2){ b[j]='1'; b3[j]=b3[j+1]=b2[j]; } else{ if(kk) b2[j]=b2[j+1]='1'; else b2[j]=b2[j+1]='0'; kk=1-kk; b[j]='0'; } b4[j]=T4[j%3]; b5[j]=T5[j%3]; b6[j]=T6[j%3]; b7[j]=T7[j%5]; b8[j]=T8[j%5]; b9[j]=T9[j%8]; b10[j]=T10[j%6]; b11[j]=T10[(j+1)%6]; b12[j]=T10[(j+2)%6]; } b3[0]=b3[3]; } int main(){ S(n); Prep(); double mn=1e9,k; int pos=0; F(i,1){ k=fn(i); if(k<mn){ mn=k; pos=i; } } ot=0; F(i,n){ F(j,n){ out[ot]=s[pos][i][j]; out[ot+1]=' '; ot+=2; } out[ot-1]='\n'; } out[ot-1]='\0'; return 0; }
Comments

