NC236137. Palindrome Game (hard version)
描述
输入描述
第一行一个整数,表示数据组数。
对于每组数据,第一行一个整数,表示01串长度。
第二行是长度为的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()