Hatena::Grouptopcoder

naoya_t@topcoder RSSフィード

2009-01-09

SRM374 Div1 Easy: SyllableSorting

| 13:16 | SRM374 Div1 Easy: SyllableSorting - naoya_t@topcoder を含むブックマーク はてなブックマーク - SRM374 Div1 Easy: SyllableSorting - naoya_t@topcoder SRM374 Div1 Easy: SyllableSorting - naoya_t@topcoder のブックマークコメント

275点問題。

System Testで{"baqibae","baebaqi"}で落ちる。結果の並び順について問題がちゃんと読めていなかった故。

class SyllableSorting {
  int vowelp(int c){ /// ← 返り値の型はboolでいい。intでもいいけど。ていうかpって何ww
    switch(c){
      case 'a':case 'e':case 'i':case 'o':case 'u': return true;
      default: return false;
    }
  }
  vector<string> parse(string s){
    vector<string> res;
    int st=1,l=sz(s),b=0;
    for(int i=0;i<l;i++){
      if(vowelp(s[i])){
        st=2;
      }else{
        if(st==2){
          res.pb(s.substr(b,i-b));
          b=i;
          st=1;
        }
      }
    }
    if(b<l) res.pb(s.substr(b));
    return res;
  }
 public:
  vector<string> sortWords(vector<string> words) {
    int n=sz(words);
    vector<pair<vector<string>,pair<vector<string>,string> > > res(n);
    rep(i,n){
      vector<string> syls=parse(words[i]);
      vector<string> sorted(all(syls));
      sort(all(sorted));
      res[i]=make_pair(sorted,make_pair(syls,words[i]));
    }
    sort(all(res));
    vector<string> ans(n);
    rep(i,n) ans[i]=res[i].second.second;
    return ans;
  }
};

SRM375 Div1 Easy: DivisibleByDigits

| 12:22 | SRM375 Div1 Easy: DivisibleByDigits - naoya_t@topcoder を含むブックマーク はてなブックマーク - SRM375 Div1 Easy: DivisibleByDigits - naoya_t@topcoder SRM375 Div1 Easy: DivisibleByDigits - naoya_t@topcoder のブックマークコメント

  • long longとか打ってるのが馬鹿馬鹿しい。typedef long long ll; は常備しないと。
  • #define ... の行とか消しとかないと30% unused codeルールに引っかかって、消してまたsubmitとか時間のロス
  • 7'40''
int gcd(int m, int n)
{
  if (m == 0 || n == 0) return 0;
  if (m == 1 || n == 1) return 1;
  if (m == n) return m;
  while (1) {
        if (m == 0) return n;
        if (n == 0) return m;
        if (m > n) m %= n; else n %= m;
  }
}
int lcm(int m, int n)
{
  return m / gcd(m,n) * n;
}

class DivisibleByDigits {
 public:
  long long getContinuation(int n) {
    long long de=1LL;
    for(int _=n;_>0;_/=10){
      int r=_%10;
      if(r) de=lcm(de,r);
    }
    for(long long b=n,m=1;b<=LONG_LONG_MAX;b*=10,m*=10){
      long long r=b%de;
      if(r==0)return b;
      long long s=de-r;
      if(s<=m-1)return b+s;
    }
    return 0;
  }
};
トラックバック - http://topcoder.g.hatena.ne.jp/n4_t/20090109