B. Hyperset

  • Quiz
  • AC
  • 解説
    • 2枚決めると最後の1枚が決まるので、それを持っているかが分かればよい
  • その他
    • 3つ組の時は常に「2つ決めたら最後の1つも決まらないかな?」と考えたい
    • Inputの制約にAll cards are distinctと書いてあったのを見逃していた。問題文には書かれていないけれどInputに制約の新情報が書かれていることがある
int main(){
    // input
    ll N,K; 
    cin>>N>>K;

    VS S(N);
    rep(i,N)cin>>S[i];

    map<string,ll> mp;

    rep(i,N){
      string s = S[i];
      mp[s]++;
    }

    auto f = [&](string& s, string& t){
      stringstream ss;
      rep(i,K){
        if(s[i]==t[i]){
          ss << s[i];
        }else{
          if(s[i]!='S' && t[i]!='S'){ss << 'S';}
          else if(s[i]!='E' && t[i]!='E'){ss << 'E';}
          else{ss << 'T';}
        }
      }
      return ss.str();
    };

    ll sum=0;
    rep(i,N){
      FOR(j, i+1, N){
        string u = f(S[i],S[j]);
        sum+=mp[u];
      }
    }
    p(sum/3);
    return 0;
}