解いた問題

5/29/2011

SRM342Div2

250
class DegreesToRadians {
public:
  double convertToRadians(int degrees, int minutes, int seconds) {

    double a = minutes * 60 + seconds;
    double b = 60 * 60;

    double c = a / b;
    double d = degrees + c;

    return d * M_PI / 180.0;
  }
};
500
class TagalogDictionary {
public:
  vector <string> sortWords(vector <string> words) {

    map<string, int> lex;
    string w[] = {"a", "b", "k", "d", "e", "g", "h", "i", "l", "m", "n", "ng", "o", "p", "r", "s", "t", "u", "w", "y", "@"};
    for(int i=0; w[i] != "@"; ++i){
      lex[ w[i] ] = i;
    }

    vector< pair<string, int> > v;
    for(int i=0; i<words.size(); ++i){
      string s;
      for(int j=0; j<words[i].size(); ++j){
        if(j && words[i][j-1] == 'n' && words[i][j] == 'g' ){
          s.erase( s.begin() + (int)s.size() - 1 );
        }
        s += words[i][j];
        s += ' ';
      }
      string t,    u;
      istringstream iss( s );
      while( iss >> t )u += 'A' + lex[t];
      v.push_back( make_pair(u, i) );
    }

    sort( v.begin(), v.end() );

    vector<string> u;
    for(int i=0; i<v.size(); ++i){
      u.push_back( words[ v[i].second ] );
    }

    return u;
  }
};
1000
似たような問題をやったことがあるから、労せず解けると思ったけど、そんなことはなかった。
下記のソースコードの22行目の式で詰まった。 x % abs(b) でやって出なかった。
string itoa(int n)
{
  ostringstream oss;
  oss << n;
  return oss.str();
}

class ReverseUnnaturalBaseConversion {
public:
  string convertToBase(int x, int b) {
    if( x == 0 )return "0";

    bool flg = false;
    if( 0 < b && x < 0 ){
      flg = true;
      x = abs( x );
    }

    ostringstream oss;
    string s;
    while( x ){
      int m = (x % abs( b ) + abs(b)) %    abs(b);
      x = (x - m) / b;
      s    = itoa(m) + s;
    }

    if( flg )s = "-" + s;

    return s;
  }
};

0 件のコメント :

コメントを投稿