解いた問題

5/17/2011

SRM336Div2

250
bool is_v(char c)
{
  return string("aiueo").find( tolower(c) ) != string::npos;
}

class VowelLatin {
public:
  string translate(string w) {
    string s, t;
    for(int i=0; i<w.size(); ++i){
      if( is_v( w[i] ) )t += w[i];
      else s += w[i];
    }
    return s + t;
  }
};
500
class ServiceNames {
public:
  vector <string> makeList(vector <string> s) {
    map< string, vector<string> > m;

    for(int i=0; i<s.size(); ++i){
      istringstream iss( s[i] );
      string t, u;
      iss >> t;
      while( iss >> u ) m[u].push_back(t);
    }

    vector <string> v;

    FOR(itr, m){
      vector<string> u = itr->second;
      string t = itr->first;
      sort( u.begin(), u.end() );

      t += " ==>";
      for(int i=0; i<u.size(); ++i){
        if(i)t += ',';
    t += " " + u[i];
      }
      v.push_back(t);
    }

    return v;
  }
};
1000
class MostLikely {
public:
  int likelyRank(vector <int> sc, int low, int high) {

    ++high;

    sc.push_back(-1);
    sc.push_back(1000000001);
    sort( ALL(sc) );

    const int size = sc.size();
    int rank[size];
    fill( rank, rank + size, -1 );

    for(int i=0; i+1<sc.size(); ++i){
      rank[i] = min( high, sc[i+1] ) - max( low, sc[i] );
    }

    int mx = *max_element( rank, rank + size );
    int idx = -1;
    for(int i=0; i<size; ++i){
      if( mx == rank[i] ){
        if( idx != -1 )return -1;
        idx = i;
      }
    }

    return size - idx - 1;
  }
};

0 件のコメント :

コメントを投稿