解いた問題

4/22/2011

SRM313Div2

250
class CyclesInPermutations {
public:
  int maxCycle(vector <int> b) {
    int r = 0;
    for(int i=0; i<b.size(); ++i){
      --b[i];
    }
    for(int i=0; i<b.size(); ++i){
      int cnt = 1;
      for(int j=b[i]; j != b[j] && i != j; j = b[j])++cnt;
      r = max(r, cnt);
    }
    return r;
  }
}; 
500
class PrefixFreeSets {
public:
  int maxElements(vector <string> w) {
    sort(w.begin(), w.end());
    for(int i=0; i+1<w.size(); ++i){
      if(w[i] == w[i+1])w.erase(w.begin() + i-- + 1);
    }
    const int size = w.size();
    bool outgo[size];
    fill(outgo, outgo + size, false);
    for(int i=0; i<w.size(); ++i){
      for(int j=0; j<w.size(); ++j){
        if(i == j)continue;
        if(w[i].size() > w[j].size())continue;
        bool tmp = w[i] == w[j].substr(0, w[i].size());
        outgo[i] = outgo[i] || tmp;
      }
    }
    return count(outgo, outgo + size, false);
  }
};
1000
なんかよく分からない。

0 件のコメント :

コメントを投稿