PKU 2611 Gas Station Numbers
http://poj.org/problem?id=2611
今ある数字の札を使った次に大きい価格を求めます。
2<ー>5、9<ー>6 は変換可能
まぁやるだけ
下の桁からみていって、今の桁の数より大きい数に変更できるなら、
その数に変更 後は残った数を小さくなるように置いていく
int main(){ string s; while(cin>>s){ if(s==".") break; reverse(ALL(s)); string res=s; vi bef(10); REP(i,s.size()){ if(s[i]=='.') continue; ++bef[s[i]-'0']; if(s[i]=='6') ++bef[9]; if(s[i]=='2') ++bef[5]; if(s[i]=='5') ++bef[2]; if(s[i]=='9') ++bef[6]; REPN(j,10,s[i]-'0'+1){ if(bef[j]){ res[i]=j+'0'; --bef[j]; if(j==9) --bef[6]; if(j==5) --bef[2]; for(int k=i-1;k>=0;--k){ if(res[k]=='.') continue; for(int l=0;l<=8;++l){ if(l==5 || bef[l]==0) continue; res[k]=l+'0'; --bef[l]; break; } } goto exi; } } } exi:; if(res==s) puts("The price cannot be raised."); else{ reverse(ALL(res)); cout<<res<<'\n'; } } return 0; }