解いた問題

5/10/2011

SRM330Div2

250
class Sortness {
public:
  double getSortness(vector <int> a) {
    double sum = 0;
    for(int i=0; i<a.size(); ++i){
      for(int j=0; j<a.size(); ++j){
        if(i < j && a[i] > a[j])++sum;
        if(j < i && a[j] > a[i])++sum;
      }
    }
    return sum / (double)a.size();
  }
};
450
class Arrows {
public:
  int longestArrow(string s) {
   
    int mx = -1;

    for(int i=0; i<s.size(); ++i){
      int cnt = 0;
      if( s[i] == '<' ){
        ++cnt;
        if( i+1 < s.size() && ( s[i+1] == '=' || s[i+1] == '-' ) ){
          for(int j=1; i+j<s.size() && s[i+1] == s[i+j]; ++j){
            ++cnt;
          }
        }
      }
      if( s[i] == '>' ){
        ++cnt;
        if( 0 <= i-1 && ( s[i-1] == '=' || s[i-1] == '-' ) ){
          for(int j=1; 0<=i-j && s[i-1] == s[i-j] ; ++j){
            ++cnt;
          }
        }
      }
      if( cnt )mx = max(mx, cnt);
    }

    return mx;
  }
}; 
1000
無理。
class NextPalindromicNumber {
public:
  string getNext(string n) {
    
    if( count( n.begin(), n.end(), '9' ) == n.size() ){
      fill( n.begin(), n.end(), '0' );
      n[0] = '1';
      n += '1';
      return n;
    }

    string s = n.substr(0, n.size() / 2 + n.size() % 2);
    string t = n.substr(0, n.size() / 2);
    reverse( t.begin(), t.end() );

    string S = s + t;
    
    reverse( s.begin(), s.end() );

    cout << s << endl;

    ++s[0];
    for(int i=0; i+1<s.size(); ++i){
      if( '9' < s[i] ){
        s[i] = '0';
        ++s[i+1];
      }
    }
    
    t = s;
    reverse( s.begin(), s.end() );
    if( n.size() % 2 )t.erase( t.begin() );

    string T = s + t;
    
    cout << S << ' ' << T << endl;

    if(n < S)return S;

    return T;
  }
};

0 件のコメント :

コメントを投稿