SRM 145 Div2
Topcoderの過去問を解いていくことにしました。
他人のコードがすべて見れるのはTopcoderだけの利点です。
200/250 350/500 Opened/1000 ; 551.2
250
screenの中から、ditheredに含まれる文字の数を答えるという問題。
ループを使って解きましたが、他の人のコードを見てるとaccumulateを使ってstringひとつにまとめてSTLのcountを使って数えるという方法もあった。すっきりしてていいかんじ。
int count(string dithered, vector <string> screen) { int result=0; REP(i,screen.size()) REP(j,dithered.size()) REP(k,screen[0].size()) if(dithered[j]==screen[i][k]) result++; return result; }
500
"00:30:00"のようにstring形式で時間が与えられるので、その時間のn%(1<=n<=99)が整数できっちり表されるようなnの個数を答える。
例えば00:28:00のときは秒換算で1680秒となり、1%だと1680/100=16.8のなるのでだめだけど、5%なら1680*5/100=84となりきっちり整数になるのでOK。
整数の判定にceilを使ったけど、ふつうに剰余でやればよかった…。gcd(秒数,100)-1ってのもあったけどそんなの思いつかん。
int getPercentages(string time) { istringstream ss(time); int result=0; int s,m,h; char tmp; ss>>h>>tmp>>m>>tmp>>s; int seconds = s + 60*m + 3600*h; FOR(i,1,100){ if(((double)(seconds*i)/100-ceil((seconds*i)/100))==0){ result = 99/i; break; } } return result; }