列表

详情


NC236137. Palindrome Game (hard version)

描述

有一个01串。两个人在一起做游戏,ALICE先手,Bob后手,他们可以从以下两种操作中选一个:
1. 任选某个为0的位置将其变为1,代价为1。
2. 若该01串目前不为回文串,且上一个操作不为操作2的情况下可以将整个01串翻转。

代价少的人获胜,否则平局。

输入描述

第一行一个整数,表示数据组数。
对于每组数据,第一行一个整数,表示01串长度。
第二行是长度为n的01串。

输出描述

对于每组数据,如果Alice获胜,输出"ALICE";如果Bob获胜,输出"BOB";平局输出"DRAW"。

示例1

输入:

3
3
110
2
00
4
1010

输出:

ALICE
BOB
ALICE

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(g++ 7.5.0) 解法, 执行用时: 17ms, 内存消耗: 508K, 提交时间: 2022-11-16 00:35:29

#include "bits/stdc++.h"
using namespace std;
const int MAX=1005;
int t,n;
char s[MAX];
int cnt1,cnt2;
int main(){
	int i,j;
	scanf("%d",&t);
	while (t--){
		scanf("%d\n%s",&n,s+1);
		cnt1=cnt2=0;
		for (i=1;i<=(n-1)/2+1;i++){
			if (s[i]!=s[n-i+1])
				cnt1++;
		}
		for (i=1;i<=n;i++) if (s[i]=='0') cnt2++; 
		if (cnt1==0){
			if (cnt2==1){
				cout<<"BOB"<<endl;
				continue;
			}
			if (cnt2%2==1){
				cout<<"ALICE"<<endl;
				continue;
			}
			cout<<"BOB"<<endl;
		}
		else{
			if (cnt2==2 && n%2==1 && s[n/2+1]=='0')
				cout<<"DRAW"<<endl;
			else
				cout<<"ALICE"<<endl;
		}
	}
	return 0;
}

C++ 解法, 执行用时: 47ms, 内存消耗: 476K, 提交时间: 2022-04-06 19:38:41

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,t,num;
	char c;
	cin>>t;
	while(t--)
	{
		cin>>n;
		int cnt=0,cou=0;
		int a[1010];
		for(int i=1;i<=n;i++)
		{
			cin>>c;
			num=c-'0';
			a[i]=num;
			if(!num)cnt++;
		}
		for(int i=1;i<=n/2;i++)
		{
			if(a[i]!=a[n-i+1])cou++;
		}
		if(cou)
		{
			if(cou==1&&cnt==2) cout<<"DRAW"<<endl;
			else cout<<"ALICE"<<endl;
		}
		else
		{
			if(!(cnt%2)||cnt==1)cout<<"BOB"<<endl;
			else cout<<"ALICE"<<endl;
		}
	}
}

Python3 解法, 执行用时: 171ms, 内存消耗: 4644K, 提交时间: 2023-05-30 15:18:16

def main():
    n = int(input())
    s = ' ' + input()
    cnt1 = s.count('0')
    cou = 0
    for i in range(1, n // 2 + 1):
        cou += (s[i] != s[n - i + 1])
    if cou > 0:
        if cou == 1 and cnt1 == 2:
            print("DRAW")
        else:
            print("ALICE")
    else:
        if cnt1 % 2 == 0 or cnt1 == 1:
            print("BOB")
        else:
            print("ALICE")

t = int(input())
for _ in range(t):
    main()

上一题