解いた問題

5/08/2011

SRM327Div2

250
class FunnyFence {
public:
  int getLength(string s) {
    s += s[ (int)s.size() - 1 ];
    int mx = 0, cnt = 0;
    for(int i=0; i<s.size(); ++i){
      if( s[i] != s[i+1] )++cnt;
      else{
        mx = max(mx, cnt);
        cnt = 0;
      }
    }
    return mx + 1;
  }
}; 
500
けっこう時間がかかった。
string itoa(int n)
{
  char s[100];
  sprintf(s, "%d", n);
  return string(s);
}

class IQTest {
public:
  string nextNumber(vector <int> prev) {   
    const string MSG0 = "AMBIGUITY";
    const string MSG1 = "BUG";
   
    if( prev.size() == 1 )return MSG0;
   
    if( prev.size() == 2 ) {
      if( prev[0] == prev[1] )return itoa( prev[0] );
      else return MSG0;
    }
   
    if( prev[0] == prev[1] ){
      if( count(prev.begin(), prev.end(), prev[0]) == prev.size() )return itoa( prev[0] );
      else return MSG1;
    }

    if( (prev[2] - prev[1]) % (prev[1] - prev[0]) ){
      return MSG1;
    }   

    int a = (prev[2] - prev[1]) / (prev[1] - prev[0]);
    int b = prev[1] - prev[0] * a;
   
    for(int i=0; i+1<prev.size(); ++i){
      if( prev[i] * a + b != prev[i+1] )return MSG1;     
    }
   
    return itoa( prev.back() * a + b );
  }
}; 
900
問題を理解するには英語力が足りないみたい。

0 件のコメント :

コメントを投稿