【Gym 101775】Problem L SOS(博弈)

博弈论 三堆石子问题 有三堆石子,分A,B,C三堆,两人进行取石子游戏,每次从其中一堆取任意多个(至少取一个,可以取完)如果应该你取石子时,已经没有石子可取,则你输。如果你第一个取,问你是否能赢,如果能赢,输出第一次的取法否则输出1经典博弈问题,同类问题有:1.一堆石子每次取1~k个,如果应该你取石子时,已经没有石子可取,则你输。2.两堆石子每次从其中一堆取个任意多个(至少取一个,可以取完),如果应该你取石子时,已经没... 阅读详情

https://codeforc.es/gym/101775/problem/L

题意

Panda和Sheep在一个1×n的矩阵中填字母S或O,当一个人填出SOS时获胜。

题解

博是博不出来的,只能靠打表维持生计。

打表也涉及到了博弈的思想。这里需要理解先手必胜态和先手必败态的概念。

先手必胜态 : 当且仅当即后有一个先手必败态。
先手必败态:当且仅当其后全是先手必胜态。

通俗的解释:
如果当前是必胜态,那么当前就有办法走到一个后手必败的状态。
如果当前是必败态,那么无论怎么走,后手都是必胜的状态。

因此打表就是暴力枚举每一种状态,从而推出先手是什么态。

对于一个状态st,
如果其后继状态中有一个满足SOS(此时相对于先手是必败态,因为先手无法操作),那么其就为必胜态。
如果后继状态中有没有满足SOS的但是有平局,那么先手肯定选择平局。
如果后继状态既没有SOS也无平局,那说明后继状态都是必胜态,那此时就是必败态。

打表代码

#include <unordered_map>

#include <bits/stdc++.h>
using namespace std;
#define FOR0(a,b) for(int i = a; i < b; ++i)
#define FORE(a,b) for(int i = a; i <= b; ++i)
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 1e8+10;
int a[maxn];
int n;
const int mod = 1e8+7;
unordered_map<ll,int> mp;
bool judge() {
	for(int i = 1; i+2 <= n; ++i)
		if(a[i] == 1 && a[i+1] == 2 && a[i+2] == 1)
			return true;
	return false;
}
ll f() {
	ll t = 0;
	for(int i = 1; i <= n; ++i)
		t = t*10+a[i];
	return t;
}
// SOS 对于先手是必败态,因为先手无法操作
// -1 失败,2平局,1胜利
int dfs(int cnt) {
	ll st = f();
	if(judge()) 
		return -1; // 当前状态是先手必败态,即先手无法操作
	if(cnt == n+1) 
		return 2; // 平局		
	if(mp[st] != 0) return mp[st];
	bool flag = true;

	int t;
	for(int i = 1; i <= n; ++i) {
		if(a[i]) continue;
		for(int j = 1; j <= 2; ++j) {
				a[i] = j;
				t = dfs(cnt+1); // 采集下一步的信息
				a[i] = 0;
				if(t == -1) { // 发现一个必败态,那么先手一定是必胜态
					return mp[st] = 1;
				}
				if(t == 2) flag = false; // 先手一定不是必败态,因为后手有平局
		}
	}


	mp[st] = flag?-1:2;
	// cout <<st <<" " << mp[st] << endl;
	return mp[st];
}
int main() {
	cin >> n;
	int t = dfs(1);
	if(t == -1) {
		puts("Sheep");
	} else if(t == 2) {
		puts("平局");
	} else 
	puts("Panda");
	return 0;
}

需要打表到>16才能发现正确规律。

  1. n < 7 平局。
  2. n >= 7 && n < 16 ,n为奇数 Panda,否则平局。
  3. n >= 16,n为奇数 Panda,n为偶数 Sheep。

代码

#include <bits/stdc++.h>
using namespace std;
#define FOR0(a,b) for(int i = a; i < b; ++i)
#define FORE(a,b) for(int i = a; i <= b; ++i)
typedef long long ll;
typedef pair<int,int> pii;

int main() {
	int T;
	cin >> T;
	for(int kas = 1; kas <= T; ++kas) {
		printf("Case #%d: ", kas);
		int n;
		cin >> n;
		if(n < 7) {
			puts("Draw");
		} else if( n >= 7 && n < 16) {
			if(n&1) puts("Panda");
			else puts("Draw");
		} else {
			if(n&1) puts("Panda");
			else puts("Sheep");
		}
	}
	return 0;
}
IEC 61851-24:2023 电动汽车导电充电系统 - 第24部分:直流电动汽车供电设备与电动汽车之间的数字通信,用于控制直流充电 - 完整英文电子版(110页) IEC 61851-24:2023 与 IEC 61851-23 共同适用于直流电动车供电设备与电动道路车辆(EV)之间的数字通信,用于控制导电直流电力传输,额定电源电压最高可达1000伏交流电或最高1500伏直流电,额定输出电压最高可达1500伏直流电。 立即下载

相关推荐

Windows10 使用Apple Studio Display显示器的设置

AppleStudioDisplay显示器购买花了近1.5wRMB,由于为windows台式机,显卡为NVIDAGTX-1660,而AppleStudioDisplay只有雷电接口,尝试了很多种转接方式,均以失败告终,最终使用贝尔金VR线成功,,附图如下这边也测试过NVIDARTX-2060Super、NVIDAGTX-1650显卡,都是能点亮的,NVIDA1650存在关机重启后黑屏,不稳定现象,2060也存在关机重启后不亮现象,后面发现1660s很稳定。...

爱意随风起,人生不可弃。 1万+

蒙特卡洛树 2017 EC-Final L.SOS

蒙特卡洛树 2017 EC-Final L.SOS 最近看AlphaZero论文学习了蒙特卡洛树,隐约记得很久以前EC-Final上有人说可以利用MTC打表,决定练练手。从构建到完成耗时两天。 蒙特卡洛树的学习可以参考:https://blog.youkuaiyun.com/ljyt2/article/details/78332802 题目可以参考:https://vjudge.net/problem...

InFiNiTeemo的博客 640

手把手教你用Gazebo和VINS-MONO搞定VIO SLAM仿真(附Realsense D435i模型配置)

本文详细介绍了如何使用Gazebo和VINS-MONO构建VIO SLAM仿真环境,包括Realsense D435i模型的配置与集成。通过实战指南,帮助开发者快速搭建高保真仿真平台,优化VIO性能,并解决常见问题,适用于机器人感知与定位导航领域。

weixin_30682415的博客 158

Gym 101775L-SOS+博弈题 +2017-2018 ACM-ICPC Asia East Continent League Final

Gym - 101775L SOS+博弈题 +2017-2018 ACM-ICPC Asia East Continent League Final 版权声明:转载文章为该文章博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文转载于https://blog.youkuaiyun.com/Lngxling/article/details/82905435 在原文基础上...

WAR 458

Win10+Anaconda环境下PaddleOCR保姆级安装指南(附常见报错解决方案)

本文提供Win10+Anaconda环境下PaddleOCR的保姆级安装指南,涵盖从环境配置到模型部署的全流程,特别针对常见报错提供解决方案。通过详细的步骤说明和实用技巧,帮助开发者快速完成PaddleOCR安装与测试,避免常见陷阱,提升OCR开发效率。

weixin_29096377的博客 375

Flutter 中使用蓝牙插件报错,说没有权限怎么解决

2、在build.grale里面更改一下版本号,我修改的是targetSdkVersion这个版本号,需要根据你自己的版本进行更改,记得更改之后先flutter clean一下再run。搞了一晚上,没搞出来,第二天用同事手机测试发现他手机可以,我手机还是不行,才发现是Android版本问题,需要修改两处地方。废话不多说,咱先看报错信息。

zzj17637822814的博客 2288

博弈论题表(好少~~~)

bzoj2017:[Usaco2009 Nov]硬币游戏 *用了一小点思想的傻逼dp(记忆化搜索)bzoj1188:[HNOI2007]分裂游戏 **很神奇的把游戏拆分为子游戏的方法bzoj1022:[SHOI2008]小约翰的游戏John *傻逼SJ定理题bzoj1982:[Spoj 2021]Moving Pebbles **思路不一般的并不是很难证的傻逼结论题bzoj2688:Green H...

weixin_30693683的博客 201

ESP32-S3驱动OV3660摄像头原理图设计,已量产

本文重点拆四条主线:多来源输入电源如何收敛到 3V3,摄像头三路供电如何拆分,ESP32-S3 如何接住 DVP 数据流与外部存储,以及音频/补光/传感外围怎样挂到主控边上。至于最终图像帧率、算法策略和软件时序,当前原理图未体现。

不脱发的程序猿 979

stone(某博弈论题)

题目描述 有三堆石子,它们的石子个数分别为 x,y,z。 A 和 B 正在博弈,由 A 先手,双方轮流操作。 每次操作是指,选择若干堆(1~3 堆)石子,从中各取出相同数量的石子(不能 1 个都不取)。不能操作的人失败。 请判定是否先手必胜。 先考虑两堆,先手必败的情况 (1,2),(3,5),(4,7),(6,10),(8,13);//两堆石子的数量。 每对两堆石子的差不相同,且每个数只出现...

Bluelanzhan的博客 840

【图像去噪】论文复现:CLIP用于图像去噪提升泛化性!CLIPDenoising的Pytorch源码复现,跑通CLIPDenoising全流程,图文结合,网络结构梳理和拆解,对应源码注释!

论文题目:Transfer CLIP for Generalizable Image Denoising —— 用于可泛化图像去噪的转移CLIP。【图像去噪】论文精读:Transfer CLIP for Generalizable Image Denoising(CLIPDenoising)CLIPDenoising理论部分详解见上面对应的论文精读,本文以源码为主,理论部分只是粗略回顾。启发:多看其他领域的文章,分析是否能应用在去噪领域,这是产生idea的要素之一;

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1412

YOLOv10改进策略【注意力机制篇】| 2024 蒙特卡罗注意力(MCAttn)模块,提高小目标的关注度

本文记录的是基于蒙特卡罗注意力(MCAttn)模块的YOLOv10目标检测改进方法研究。利用提高的跨尺度特征提取能力,使模型能够更好地传递和融合提取的多尺度特征,提高对小目标的关注度。Exploiting Scale-Variant Attention for Segmenting Small Medical Objects使用一种基于随机采样的池化操作来生成尺度无关的注意力图。它从三个不同尺度(3×33×33×3、2×22×22×2和1×11×11×1,即池化张量)中随机选择一个1×11×11×1注意力图

Limiiiing的博客 2186

Gym - 101775L SOS 博弈 找规律

题目:https://cn.vjudge.net/problem/Gym-101775L PS:训练赛中被这道题折磨的不轻,和队友反复推必胜态与必败态试图推导出公式或者规律,然后推的心态逐渐失控,,,最后十分钟没辙了,队友站在一起,猜,猜一个规律出来,emmm,比赛半路中不经意听到旁边打过这场EC-final现场赛的学长说这题打表找规律,还在对面A题后讨论中听到16和偶数,嘿嘿,于是迫不得已猜规...

weixin_30677073的博客 142

Open3D 计算点云配准的旋转和平移误差

通过计算旋转误差和平移误差来量化配准结果与真实变换之间的偏差。

点云侠的博客 250

SOS Gym - 101775L (找规律)

Mr. Panda and Mr. Sheep are playing a game on a 1 × N game board. Initially, all the cells are empty. Mr. Panda and Mr. Sheep take alternate moves and Mr.Panda moves first. On each move, a player mus...

海绵的博客 759

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Gym 101775 2017-2018 ACM-ICPC Asia East Continent League Final (EC-Final 2017)

传送门 A.Chat Group 不难发现,题目中让我们求的式子为: 而很显然,因为n相当的大,因此直接做的话绝对会超时,因此考虑将式子转化。 根据组合数的公式,上述的式子可以转化为: 因为此时的k比较小,因此我们利用组合数公式递推求解。 #include <bits/stdc++.h> #define maxn 100...

weixin_30267691的博客 311

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

2017-2018 ACM-ICPC Asia East Continent League Final L. SOS(博弈,思维)

LINK 小范围手动模拟,发现不管怎样都可以平局,一时间不知道怎样必胜 考虑样例n=7n=7n=7的情况 先手现在中间放下一个SSS 然后不管后手怎么走,先手都在另一侧的端点放一个SSS(下面用eee表示空) 这样形成了S e e S S e e 或者S e e S e S e 或者S e e S e e S 这样一来我们有形如S e e S的状态,可以看出这是一个必败态,不管放在哪个位置放什么都输了 所以先手的任务只需要在S e e S之外的空位置填满且不输掉-----这是肯定可以做到的 所以n=7n=7

jziwjxjd的博客 456

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

3.1讲课

2.28模拟赛 T1 取石子 博弈论 题面:有三堆石子,它们的石子个数分别为 x,y,z。 A 和 B 正在博弈,由 A 先手,双方轮流操作。 每次操作是指,选择若干堆(1~3 堆)石子,从中各取出相同数量的石子(不能 1 个都不取)。不能操作的人失败。 请判定是否先手必胜。 题解: 博弈论(想DP) 令 f[x][y][z]面对一个x,y,z的局面,表示先手是否必败,为布尔值...

weixin_30387799的博客 193

博弈论题集

NYOJ 23 取石子(一) 有一堆石子共有n个,A和B轮流取,A先,每次最少取1个,最多取m个,先取完者胜,A,B足够聪明,问谁先胜? 比较简单的巴什博弈,若n%(m+1)!=0,A胜,否则B胜。 NYOJ 833 取石子(七) n个石子摆成一圈,A和B轮流取,每次可以从中取一个或相邻两个,先取完者胜,A先取,问谁胜? 若n==1||n==2 则A...

小渣渣的博客 1264

[博弈论]Stone

Stone Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2532Accepted Submission(s): 1791 Problem Description Tang and Jiang are good fri...

micklongen的专栏 382

博弈论之取石子游戏的学习

以下内容来自转载: 博弈问题简介 所讨论的博弈问题满足以下条件: 玩家只有两个人,轮流做出决策游戏的状态集有限,保证游戏在有限步后结束,这样必然会产生不能操作者,其输对任何一种局面,胜负只决定于局面本身,而与轮到哪位选手无关 一般称满足以上条件的游戏称为ICG,比如我们将要讨论的Nim游戏。作为一个对比,我们平时玩的象棋就不属于ICG,因为它不满足第

Eminem1147的博客 3万+

取石子游戏与SG函数

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1848 题意:有3堆石子,石子数量分别为a,b,c,有两个玩家,每次只能从任意一堆中取f个,这里的f只能为fibnacci数,问是先手胜 还是先手败. 分析:由于石子的数量都在1000以内,那么我们可以先预处理出1000以内的SG函数值,然后对于3堆石子,我们进行异或,如果为 0说明

ACdreamer 2417

Codeforces Round #399 (Div. 1 + Div. 2, combined) (博弈,Nim游戏)E.Game of Stones

Sam has been teaching Jon theGame of Stonesto sharpen his mind and help him devise a strategy to fight the white walkers. The rules of this game are quite simple: The game starts withnpiles of ...

weixin_30325971的博客 220

Gym - 101775L SOS —— 规律

题意: 长度n的棋盘,依次向里面放S或者O,谁下的时候形成了SOS谁就赢 Panda先手Sheep后手 思路: 这题真的蛮有趣 所有情况中,只有形成了S - - S这种情况时,不管再向里面填了什么,另一个人都会赢,这是这题的突破口 (1)当n小于7的时候,随便模拟一下知道最优情况下都是平局,不会有一个人会让另一个人赢 (2)当n为大于7的奇数时,先手必胜 以7为例: 先手   ...

Lngxling的博客 852

Codeforces 1117 F Crisp String —— SOSDP

This way 题意: 给你一个串,然后给你每两种字符之间的关系,1表示可以相邻,否则是0,。你每次可以消去一种字符,剩下的字符按照原来的顺序拼接起来,并且满足字符之间的关系,问你最后这个串的长度最短是多少。 题解: 如果当前有这么一个串:acbeda 假设ab是不能相邻的,那么假设0表示未消去,1表示消去, 那么00100,00011这两个是不合法的,并且所有包含它们的状态都是不合法的,我们将...

天翼之城的博客 368

博弈论(取石子专题)

有一堆石子共有N个。A B两个人轮流拿,A先拿。每次最少拿1颗,最多拿K颗,拿到最后1颗石子的人获胜。假设A B都非常聪明,拿石子的过程中不会出现失误。给出N和K,问最后谁能赢得比赛。 题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1066 必胜策略:令 n = (k + 1) * r + s ; A第一...

成龙大侠的博客 3471
上一篇: 【数学期望】期望dp
下一篇: 【Gym 101775】 H. H. Mr. Panda and Birthday Song(动态规划,分类讨论)
Link_Ray
博客等级 码龄9年 44粉丝 156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值