#!/bin/sh f=/tmp/g$$ cat >$f.cpp <<'EOF' #include #include #include #include #include #include #include using namespace std; int main(int ac,char**av){ int nc2=atoi(av[1]),nc1=atoi(av[2]),nr=atoi(av[3]),S=ac>4?atoi(av[4]):1;double secs=ac>5?atof(av[5]):4.8; int W=140*S,H=110*S,N=W*H,P=29*23;vector>pos;for(int y=0;y<=110;y+=5)for(int x=0;x<=140;x+=5)pos.push_back({x,y}); vector>> pix(3,vector>(P));for(int t=0;t<3;t++)for(int q=0;qtypes(nc2,0);types.insert(types.end(),nc1,1);types.insert(types.end(),nr,2);int K=types.size();mt19937 g(1234567+nc2*10000+nc1*100+nr);vectorbestS,bestT;int best=0;auto st=chrono::steady_clock::now(); for(int rep=0;;rep++){if(chrono::duration(chrono::steady_clock::now()-st).count()>secs)break;vectortt=types;if(rep>0)shuffle(tt.begin(),tt.end(),g);vectors;vectorcnt(N,0);int val=0; for(int k=0;k>c;for(int q=0;qd(0,pool-1);int q=c[P-1-d(g)].second;s.push_back(q);for(int z:pix[t][q])if(cnt[z]++==0)val++;} uniform_real_distributionU(0,1);uniform_int_distributionSI(0,K-1),QI(0,P-1);int iters=max(5000,60000/max(1,K));for(int it=0;it=val||U(g)best)best=val,bestS=s,bestT=tt;} for(int sweep=0;sweep<2;sweep++)for(int a=0;abv)bv=v,bq=q;}for(int z:pix[t][bq])cnt[z]++;s[a]=bq;val=bv;if(val>best)best=val,bestS=s,bestT=tt;}} cerr<<"reps done\n";cout<<"BEST "<