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;
}