Particle

競技プログラミングについての雑記

AOJ 0523: Card Game

太郎が持っている:1
花子が持っている:0
残ってない:-1

のようにすると、配列1つと単純なループで解くことができます。(入出力も簡単)

#include<iostream>
#include<cstring>
using namespace std;

int card[200];

int main(){
	int n;
	while(cin>>n,n){
		memset(card,0,sizeof(card));
		for(int i = 0; i < n; i++){
			int a;
			cin>>a;
			card[a-1] = 1;
		}
		
		int a[2] = {n,n};
		bool flag = 1,p = 1;//p = 1のとき太郎、p = 2のとき花子番
		while(flag){
			for(int i = 0; i < 2*n && flag; i++){
				if(card[i]==p){
					card[i] = -1;
					flag = --a[p];
					p = !p;
				}
			}
			p = !p;//ゲームが続いているなら、パスしてるはずなので手番を入れ替える
		}
		
		cout<<a[0]<<'\n'<<a[1]<<endl;
	}
	return 0;
}