いきなり引っかかって手間取った。
https://code.google.com/codejam/contest/11254486/dashboard#s=p0&a=2
問題
幾つかの数字からなる文字列がある。
それぞれを英語表記に置き換えて連結し、順番を並べ替えたものが与えられる。
元の文字列にあった数字を列挙せよ。
解法
残されたアルファベット群のうち、「この数字からしか生成されない文字」を含むものがあれば、その分元の文字列がその数字を含むことになる。
具体的にはZGHWRXSFIOの順で数を数えれば、0832467591の登場回数がわかる。
void solve(int _loop) { int f,i,j,k,l,x,y; string S; int cnt[256]={}; int ret[10]={}; cin>>S; FORR(r,S) cnt[r]++; _P("Case #%d: ",_loop); while(cnt['Z']) ret[0]++, cnt['Z']--,cnt['E']--,cnt['R']--,cnt['O']--; while(cnt['G']) ret[8]++, cnt['E']--,cnt['I']--,cnt['G']--,cnt['H']--,cnt['T']--; while(cnt['H']) ret[3]++, cnt['T']--,cnt['H']--,cnt['R']--,cnt['E']--,cnt['E']--; while(cnt['W']) ret[2]++, cnt['T']--,cnt['W']--,cnt['O']--; while(cnt['R']) ret[4]++, cnt['F']--,cnt['O']--,cnt['U']--,cnt['R']--; while(cnt['X']) ret[6]++, cnt['S']--,cnt['I']--,cnt['X']--; while(cnt['S']) ret[7]++, cnt['S']--,cnt['E']--,cnt['V']--,cnt['E']--,cnt['N']--; while(cnt['F']) ret[5]++, cnt['F']--,cnt['I']--,cnt['V']--,cnt['E']--; while(cnt['I']) ret[9]++, cnt['N']--,cnt['I']--,cnt['N']--,cnt['E']--; while(cnt['O']) ret[1]++, cnt['O']--,cnt['N']--,cnt['E']--; FOR(i,10) while(ret[i]--) _P("%d",i); _P("\n"); }
まとめ
コピペの際スペルミスとかタイプミスして変に手間取った。