[codeforces 1373B] 01 Game 删除01或10的博弈

Educational Codeforces Round 90 (Rated for Div. 2)   参与排名人数12840

[codeforces 1373B]    01 Game  删除01或10的博弈

总目录详见https://blog.csdn.net/mrcrack/article/details/103564004

在线测评地址http://codeforces.com/contest/1373/problem/B

Problem Lang Verdict Time Memory
B - 01 Game GNU C++17 Accepted 30 ms 3600 KB

题目大意:给定一个0,1构成的串,若该串中有10或01就可将其删除,否则,什么也做不了。Alice先手,Bob后手,给定一个0,1构成的串,轮到的哪位,什么都做不了,哪位就判定为输。Alice赢,输出DA,反之,输出NET。

题中例子模拟如下

1011001

DA

删除过程如下
1011001→11001→101->1
1011001→11001→110->1

1011001→11001->101->1
1011001→11001->110->1

1011001→10101->101->1

1011001→10110->110->1
1011001→10110->101->1

可以看到,无论怎么删,删除次数是一定的,由min(0的数量,1的数量)决定。
该例子中
0的数量是3
1的数量是4
删除次数是3

Alice(A),Bob(B)
1(A) 2(B) 3(A)   
轮到Bob(B)无法操作,故Alice(A)赢,输出DA

AC代码如下:

#include <stdio.h>
#include <string.h>
char s[110];
int cnt[2];
int main(){
	int t,n,tot,i;
	scanf("%d",&t);
	while(t--){
		scanf("%s",s);
		n=strlen(s),cnt[0]=cnt[1]=0;
		for(i=0;i<n;i++)
			if(s[i]=='0')cnt[0]++;
			else if(s[i]=='1')cnt[1]++;
		if(cnt[0]>cnt[1])tot=cnt[1];
		else tot=cnt[0];
		if(tot%2)printf("DA\n");
		else printf("NET\n");
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章