解いた問題

5/04/2011

SRM320Div2

250
class StringSegment {
public:
  double average(string s) {
    int cnt = 0;
    for(int i=0; i<s.size(); ++i){
      ++cnt;
      for(; i+1 < s.size(); ++i){
    if(s[i] != s[i+1])break;
      }
    }
    return (double)s.size() / (double)cnt;
  }
};
500
解説読んだ。よく分からん。
1000
class ContestSchedule {
public:
  double expectedWinnings(vector <string> c) {
    const int size = c.size();
    int begin[size];
    int end[size];
    double p[size];

    double t[size][size];
    fill( &t[0][0], &t[size-1][size], 0 );

    for(int i=0; i<size; ++i){
      istringstream iss( c[i] );
      iss >> begin[i] >> end[i] >> p[i];
      p[i] /= 100.0;
    }

    for(int i=0; i<size; ++i){
      t[0][i] = p[i];
    }

    for(int i=0; i+1<size; ++i){
      for(int j=0; j<size; ++j){
        if( t[i][j] == 0.0 )continue;
        for(int k=0; k<size; ++k){
          if( end[j] <= begin[k] ){
            t[i+1][k] = max( t[i+1][k], t[i][j] + p[k] );
          }
        }
      }
    }

    return *max_element( &t[0][0], &t[size-1][size] );
  }
};

0 件のコメント :

コメントを投稿