#include using namespace std; 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; } typedef struct{ string q; vector rem; vector> v; }his; vector alive; vector slis; map sinv; queue dead_q; vector> prbs; vector prb; vector hv; set ast; void incl(string s){ int sid=sinv[s]; 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); } } prb.resize(slis.size()); vector prb_ini; for(int i=0;i0.6){q=slis[bj];} else if(head<=9){ for(int pt=0;pt<5;pt++){ q.push_back('0'+((head+pt)%10)); } head++; } else{q=slis[bj];} // cerr << prbs[bi][bj] << "\n"; } auto ar=ask(q); int ac=0; for(auto &nx : ar){ if(nx==30){ac++;} } if(pac!=ac){ if(alive[sinv[q]]){ ast.erase(sinv[q]); alive[sinv[q]]=0; incl(q); } } else{ if(alive[sinv[q]]){ ast.erase(sinv[q]); alive[sinv[q]]=0; excl(q); } } pac=ac; his cur; cur.q=q; cur.rem=remp; cur.v=vemp; for(auto &nx : ar){ if(nx<30){cur.rem[nx]++;} } for(auto i : ast){ int tg=hbc(q,slis[i]); cur.v[tg].push_back(i); } prbs.push_back(prb_ini); for(int i=0;i<30;i++){ if(cur.v[i].size()==0){continue;} if(cur.rem[i]==0){ for(auto &nx : cur.v[i]){ if(alive[nx]){ ast.erase(nx); alive[nx]=0; dead_q.push(nx); } } } else{ double app=cur.rem[i]; app/=cur.v[i].size(); for(auto &nx : cur.v[i]){ prbs[cq][nx]=app; } } } hv.push_back(cur); while(!dead_q.empty()){ auto od=dead_q.front(); dead_q.pop(); excl(slis[od]); } cerr << (cq+1) << " : " << (30-pac) << " " << ast.size() << "\n"; } }