#include #include using namespace std; long long start_time; void start_clock(){ struct timeval tv; gettimeofday(&tv, NULL); start_time=(tv.tv_sec*1000000+tv.tv_usec); } long long current_clock(){ struct timeval tv; gettimeofday(&tv, NULL); long long current_time=(tv.tv_sec*1000000+tv.tv_usec); // cout << current_time-start_time << "(us)\n"; return current_time-start_time; } bool check(string s){ sort(s.begin(),s.end()); for(int i=1;i; vector ask(string s){ cout << s << "\n"; fflush(stdout); vector res(30); vector rv; for(int i=0;i<30;i++){ cin >> res[i].first >> res[i].second; rv.push_back(res[i].first*6+res[i].second); } // cerr << "done\n"; if(res[0].first==5 || res[0].first<0){exit(0);} // finish return rv; } int hbc(string s,string t){ int res=0; for(int k=0;k<5;k++){ if(s[k]==t[k]){res+=6;} } for(int k=0;k<5;k++){ for(int l=0;l<5;l++){ if(k==l){continue;} if(s[k]==t[l]){res++;} } } return res; } vector slis; map sinv; vector> eqs; vector eqv; vector> einv; vector alive; const double alpha=0.15; vector prob; void run(){ vector gap(eqv.size()); for(int i=0;i1.0){nx=1.0;} } } void rm(string s,int del){ int sid=sinv[s]; prob[sid]=del; for(auto &nx : einv[sid]){ for(int i=0;i unans; void check(){ while(true){ vector rmt; vector rmf; for(int i=0;i remp(32,0); vector> vemp(32); for(int i=0;i<=99999;i++){ int v=i; string cur; for(int j=0;j<5;j++){ cur.push_back('0'+v%10); v/=10; } reverse(cur.begin(),cur.end()); if(check(cur)){ sinv[cur]=slis.size(); slis.push_back(cur); alive.push_back(1); prob.push_back(30.0/30240.0); } } einv.resize(slis.size()); int pac=0; for(int cq=0;;cq++){ string q; if(cq==0){q="01234";} else if(!unans.empty()){ q=unans.back(); unans.pop_back(); } else{ long long tail=current_clock()+120000; int exc=0; while(current_clock()> els(32); vector cnt(32,0); for(auto &nx : ca){ cnt[nx]++; } for(auto &nx : unans){ cnt[hbc(nx,q)]--; } for(int i=0;i