CF 721 B2

本文探讨了一种基于01字符串的双人游戏,玩家翠花和狗剩轮流操作,目标是将所有0变为1。游戏策略围绕回文字符串展开,分析了不同情况下的胜败条件。对于回文字符串,特定条件决定了游戏结果;非回文字符串中,翠花有策略确保胜利。文章通过案例解析了游戏过程,并提供了C++代码实现。

#Palindrome Game (hard version)
链接: link.
题意:给定一个只包含01的字符串,翠花和狗剩先后进行操作,每次可以将一个0变成1 花费一元,或将字符串反转不花费钱第二个操作当且仅当字符串不是回文且上一次未反转时才成立,将0全部变成1后花费少的胜。

题解:
先考虑特例是回文
必败状态:回文有两个0且翠花先手 狗剩赢两块
有偶数个0 翠花先手狗剩每一次都点翠花点的按中点对称过来直到翠花进入必败状态 狗剩赢两块
有奇数个0 翠花可以先花意愿使变成第一种情况 翠花赢一块
特例 当是奇数且只有一个0 狗剩赢一块
再考虑普遍情况
对于一个字符串按一次只有两种情况是回文或不是回文,因为翠花先手所以当翠花先一步让狗剩进入会被迫近必败状态的情况 翠花必胜
特例只有两个零且不是回文只能一人花一块 平局

#include <iostream>
#include <algorithm>
#include <cstring>
#include  <cstdio>
#include <set>
#include <queue>
#include <vector>
#include <map>
#include <cmath> 
#define x first
#define y second

using namespace std;

typedef long long LL;
typedef pair<int, int> PII;
typedef unsigned long long ULL;
const int N = 1e6 + 10, M = 1e6 + 10, INF = 0x3f3f3f3f, mod = 998244353;
int n, t;
int main() {
	cin >> t;
	while (t--) {
		string str;
		cin >> n >> str;
		bool flag = true;
		int cnt = 0;
		for (int i = 0; i < str.size(); i++) {
			if (str[i] == '0') cnt ++;
			if (str[i] != str[n - i - 1])	flag = false;
		}
		if (flag) {
			if (cnt & 1 && cnt != 1) 	cout << "ALICE" << endl;
			else				cout << "BOB" << endl;
		}
		else {
			if (n & 1 && str[n / 2] == '0' && cnt == 2)	cout << "DRAW" << endl;
			else 										cout << "ALICE" << endl;
		}
	}

	return 0;
}
61713-33d6949b941bbd87.js:234 Uncaught TypeError: t.prompt_template?.map is not a function at L (61713-33d6949b941bbd87.js:234:12799) at 61713-33d6949b941bbd87.js:230:11379 at Object.aH [as useMemo] (a70869a4-b2cf94904cef214b.js:1:58677) at t.useMemo (10347-2c02f7f9264c26a9.js:1:134181) at L (61713-33d6949b941bbd87.js:230:10691) at page-7c95f770b73c4974.js:41:2031 at l2 (a70869a4-b2cf94904cef214b.js:1:50100) at ox (a70869a4-b2cf94904cef214b.js:1:69891) at ob (a70869a4-b2cf94904cef214b.js:1:68804) at oU (a70869a4-b2cf94904cef214b.js:1:84711) at ic (a70869a4-b2cf94904cef214b.js:1:112391) at a70869a4-b2cf94904cef214b.js:1:112236 at is (a70869a4-b2cf94904cef214b.js:1:112244) at u5 (a70869a4-b2cf94904cef214b.js:1:109327) at iV (a70869a4-b2cf94904cef214b.js:1:130105) at iR (a70869a4-b2cf94904cef214b.js:1:128324) at ib (a70869a4-b2cf94904cef214b.js:1:126017) at ig (a70869a4-b2cf94904cef214b.js:1:123769) at u9 (a70869a4-b2cf94904cef214b.js:1:110517) at u5 (a70869a4-b2cf94904cef214b.js:1:109870) at iH (a70869a4-b2cf94904cef214b.js:1:129984) at MessagePort.w (10347-2c02f7f9264c26a9.js:1:149273) L @ 61713-33d6949b941bbd87.js:234 (anonymous) @ 61713-33d6949b941bbd87.js:230 aH @ a70869a4-b2cf94904cef214b.js:1 t.useMemo @ 10347-2c02f7f9264c26a9.js:1 L @ 61713-33d6949b941bbd87.js:230 (anonymous) @ page-7c95f770b73c4974.js:41 l2 @ a70869a4-b2cf94904cef214b.js:1 ox @ a70869a4-b2cf94904cef214b.js:1 ob @ a70869a4-b2cf94904cef214b.js:1 oU @ a70869a4-b2cf94904cef214b.js:1 ic @ a70869a4-b2cf94904cef214b.js:1 (anonymous) @ a70869a4-b2cf94904cef214b.js:1 is @ a70869a4-b2cf94904cef214b.js:1 u5 @ a70869a4-b2cf94904cef214b.js:1 iV @ a70869a4-b2cf94904cef214b.js:1 iR @ a70869a4-b2cf94904cef214b.js:1 ib @ a70869a4-b2cf94904cef214b.js:1 ig @ a70869a4-b2cf94904cef214b.js:1 u9 @ a70869a4-b2cf94904cef214b.js:1 u5 @ a70869a4-b2cf94904cef214b.js:1 iH @ a70869a4-b2cf94904cef214b.js:1 w @ 10347-2c02f7f9264c26a9.js:1 这是控制台报错信息
最新发布
09-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值