D - カード並べ

Quiz

https://atcoder.jp/contests/joi2010yo/tasks/joi2010yo_d

AC code

https://atcoder.jp/contests/joi2010yo/submissions/10252516

解法

  • next_permutationで全ての並び方を考慮し、先頭k個を採用する
  • 3200msかかるが、10秒制限なので大丈夫

code抜粋

int main(){
    cin.tie(0);
    ios::sync_with_stdio(false);

    // input
    ll N,K;cin>>N>>K;
    VI A(N);
    rep(i,N)cin>>A[i];

    VI I;
    rep(i, N) I.push_back(i);

    set<string> se;
    do{
      // 前のk枚
      stringstream ss;
      rep(i, K){
        ll idx = I[i];
        ss << A[idx];
      }
      se.insert(ss.str());
    }while(next_permutation(ALL(I)));

    ll ans = se.size();
    p(ans);

    return 0;
}