C-merのブログ

ザ・雑記

SRM 502 Div 1 - Problem 250 TheLotteryBothDivs

問題
SRM 502 Div 1 - Problem 250 TheLotteryBothDivs
TopCoder Statistics - Problem Statement

使用言語
C++

方針
・setを用意する.
・setの各要素について,要素の各下位str.length()字が新たな文字列strに一致する場合は,その要素を廃棄.str追加.
・新たな文字列strについて,strの下位itr.length()字がsetのある要素itrに一致する場合はstrは廃棄.

問題点
・ほとんどのケースで通るが112番目のケースでWA,コーナーケースか?(201808022025現在)

所感
・実装するだけだと思っていたが...

コード

#define lgt length()

set<string> st;

void add (string str)
{
  bool flag = true;
  for (string itr: st) {
    if (itr.lgt >= str.lgt) {
      if (itr.substr(itr.lgt-str.lgt, str.lgt) == str)
        st.erase(itr);
    } else {
      if (str.substr(str.lgt-itr.lgt, itr.lgt) == itr)
        flag = false;
    }
  }
  if (flag) st.insert(str);
}

class TheLotteryBothDivs {
    public:
    double find(vector<string> goodSuffixes) {
      int size = goodSuffixes.size();
      double ans = 0.0;
      for (size_t i = 0; i < size; i++)
        add(goodSuffixes[i]);
        for (string itr: st) {
          cout<<itr<<endl;
          ans += pow(0.1, itr.lgt);
        }
      return ans;
    }
};