AOJ 0523 - Card Game
{1からnまでのカード} - {太郎さんのカード} = {花子さんのカード}なので,
set_differentがつかえます.
太郎さんと花子さんのターンを両方してから,なくなってしまったか判定しちゃいけないです.
太郎さんがなくなっていたら終わりですと気づくのに少々時間がかかった.
#include<iostream> #include<vector> #include<algorithm> void turn(std::vector<int> &cards, int &ba){ for(int i=0;i<cards.size();i++){ if(cards[i] > ba){ ba = cards[i]; cards.erase(cards.begin() + i); return; } } ba = 0; } int main(){ int n; while(std::cin >> n, n){ std::vector<int> a, _v, b; for(int i=0;i<n;i++){ int j; std::cin >> j; a.push_back(j); _v.push_back(2*i+1); _v.push_back(2*i+2); } std::sort(a.begin(), a.end()); std::set_difference(_v.begin(), _v.end(), a.begin(), a.end(), std::inserter(b, b.begin())); int ba = 0; while(true){ turn(a, ba); if(a.empty())break; turn(b, ba); if(b.empty())break; } std::cout << b.size() << "\n" << a.size() << "\n"; } }