COMPFEST 15 - Preliminary Online Mirror I. Imagination Castle(dp递推+sg函数思想)

news2024/11/25 14:45:33

题目

n*m(1<=n,m<=2e5)的棋盘,有k(k<=min(n*m,2e5))个特殊位置,

初始时在(1,1)位置,Chaneka和Bhinneka两人玩游戏,Chaneka先手,

当你在(x,y)位置时,下一步可以走到同一行靠右的位置(x'=x,y'>y)或同一列靠下的位置(x'>x,y'=y)

保证(1,1)不是特殊位置,若走到特殊位置则获胜,若无法操作则失败

问双方都最优操作下,谁获胜

思路来源

https://www.cnblogs.com/cjjsb/p/17693794.html#i-imagination-castle

题解

首先会想到n*m的sg打表,sg值转移可以大于1,但是本题是没有必要的,

只需关注sg=0和sg=1两个值就可以了,也就是先手必胜和先手必败态

对于特殊位置,由于先手站在其同行左侧或者同列上侧,走一步就赢了

后手同理,所以两人不会往这些地方上走,

对于每个特殊位置,可以给其同行左侧和同列上侧这些地方打X

对剩下的图中O的部分跑sg,再判断(1,1)是不是一个先手必败点,

画圈的地方是先手必败点,复杂度O(n*m)

考虑我们一开始最右下角,倒着推sg值的过程,

1. (x,y)在右下角,必败,sg(x,y)=0,同时第x行左侧和第y列上侧所有sg值为1,接着考虑(x-1,y-1)

2. (x,y)被X覆盖,要么当前位置有棋子,要么右侧有棋子,要么下方有棋子

①如果当前位置有棋子,说明当前位置是一个必败态,接着考虑(x-1,y-1),和第一种情况类似

②如果仅右侧有棋子,说明当前位置必胜态,同行左侧都是必胜态,同行不可能再出现必败态了,但同列下方都是必胜态,还有可能在上方出现必败态,接着考虑(x-1,y)

③如果仅下放有棋子,说明当前位置必胜态,同列上侧都是必胜态,同列不可能再出现必败态了,

但同行右侧都是必胜态,还可能在左侧出现必败态,接着考虑(x,y-1)

然后发现,这么移动指针时,中途经过的点,只可能有这两种情况,

要么(x,y)是一个必败态,要么(x,y)被X覆盖,简单证明没有被X覆盖的一定是必败态

1. 因为当(x,y)没有被X覆盖时,(x,y)右侧、下方都没有棋子,无法直接一步获胜

2. 间接获胜的情形也是不存在的,是因为上一个必败态(x',y')产生后,接下来考虑的是(x'-1,y'-1)

反过来看,当考虑(x,y)的时候,x行右侧、y列下侧是没有必败态的,

无法转移到必败态,所以当前就是必败态

心得

妙妙cf2300思维题,利用dp的递推以及全图只有min(n,m)个额外的必败态点,将两维拆开

巧妙的通过双指针找到所有额外的必败态点,从而确定n*m个值的sg状态

对于一个n*m的矩形,要么砍掉最后一行,要么砍掉最后一列,要么同时砍掉,去求更小的子局面

代码

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
typedef long long ll;
typedef double db;
typedef pair<int,int> P;
#define fi first
#define se second
#define dbg(x) cerr<<(#x)<<":"<<x<<" ";
#define dbg2(x) cerr<<(#x)<<":"<<x<<endl;
#define SZ(a) (int)(a.size())
#define sci(a) scanf("%d",&(a))
#define pb push_back
#define all(a) a.begin(),a.end()
#define pt(a) printf("%d",a);
#define pte(a) printf("%d\n",a)
#define ptlle(a) printf("%lld\n",a)
#define debug(...) fprintf(stderr, __VA_ARGS__)
std::mt19937_64 gen(std::chrono::system_clock::now().time_since_epoch().count());
ll get(ll l, ll r) { std::uniform_int_distribution<ll> dist(l, r); return dist(gen); }
const int N=2e5+10,INF=0x3f3f3f3f;
int n,m,k,x,y,r[N],c[N];
bool sol(){
	sci(n),sci(m),sci(k);
	rep(i,1,k){
		sci(x),sci(y);
		r[x]=max(r[x],y);
		c[y]=max(c[y],x);
	}
	for(x=n,y=m;x>=1 && y>=1;){
		if(y<=r[x] && x<=c[y])x--,y--;
		else if(y<=r[x])x--;
		else if(x<=c[y])y--;
		else{
			if(x==1 && y==1)return 0;
			x--,y--;
		}
		//printf("x:%d y:%d\n",x,y);
	}
	return 1;
}
int main(){
	puts(sol()?"Chaneka":"Bhinneka");
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1097630.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

格式化前做好备份,内存卡数据安全无忧

内存卡格式化会怎么样&#xff1f;了解格式化原理的小伙伴都明白&#xff0c;格式化操作会清除内存卡上的所有数据&#xff0c;包括文档、照片、视频等文件。 因此&#xff0c;在格式化内存卡之前&#xff0c;我们需要将重要的数据进行备份以免丢失。那么&#xff0c;内存卡格式…

408-2015

一、单项选择题 1.已知程序如下。 int S(int n){return n<0?0:s(n-1)n; } void main(){cout<<S(1); }程序运行时使用栈来保存调用过程的信息&#xff0c;自栈底到栈顶保存的信息依次是_____。 A.main()->S(1)->S(0) B.S(0)->S(1)->main() …

uniapp安卓 华为商店 vivo商店 oppo 小米 上架问题 Android中怎么才能不提前申请权限

问题描述 提交 小米 oppo 市场审核失败&#xff0c;原因是提前向用户申请开启通讯录、定位、短信、录音、相机和日历等权限。 解决方案&#xff1a; 是否有使用 READ_PHONE_STATE 权限&#xff0c;如果有使用 oaid 代替&#xff1b;是否有使用第三方 SDK&#xff0c;如果有关…

RPA厂商有哪些?国内头部5家RPA厂商的分析对比

一、RPA是什么&#xff1f; 能模拟人工进行鼠标点击键盘输入、读取信息等操作&#xff0c;实现电脑和手机上各种软件的自动化。 快速搭建任何自动化流程&#xff0c;在工作中&#xff0c;一切重复有规则的事情都可以用RPA来实现自动化。 二、RPA能帮助政企解决什么问题&#…

【百家稷学】人才强企数字化赋能人工智能深度培训(中国联通集团实训)

继续咱们百家稷学专题&#xff0c;本次是有三AI在中国联通集团进行的系统性培训。百家稷学专题的目标&#xff0c;是走进100所高校和企业进行学习与分享。 分享主题 本次分享是在中国联通集团山西邮电学院进行&#xff0c;由51CTO负责组织&#xff0c;主题是《人才强企数字化赋…

外部统一设置了::-webkit-scrollbar { display: none; }如何单独给特定元素开启滚动条设置样式-web页面滚动条样式设置

如果你在外部统一设置了​​::-webkit-scrollbar { display: none; }​​​来隐藏滚动条&#xff0c;但是想要在​​.lever​​元素中单独开启滚动条的样式&#xff0c;你可以使用CSS的级联选择器来覆盖外部样式。 以下是一个示例&#xff0c;展示如何给​​.lever​​单独开启…

linux centos7提示 cannot found font installed on the system.calibri

主图 目录 1.问题描述2.问题解决2.1安装Microsoft Core Fonts2.2手动安装字体文件&#xff1a;2.3查看当前系统基本型细腻 总结参考 文章所属专区 超链接 1.问题描述 linux centos7提示 cannot found font installed on the system.calibri &#xff0c;linux系统找不到cali…

226、翻转二叉树

题目链接&#xff1a; \sf 题目链接&#xff1a; 题目链接&#xff1a; 图解&#xff1a; 方法一、 D F S \sf 方法一、DFS 方法一、DFS 递归&#xff1a; 让左子树是翻转后的右子树&#xff0c; 右子树是翻转后的左子树。 ∴从叶结点开始&#xff0c;自底向上逐步翻转。递归出…

2023年中国超硬材料制品分析及超硬刀具市场规模分析[图]

超硬材料是指硬度特别高的材料&#xff0c;可分为天然以及人造两种&#xff0c;前者主要包括天然的钻石&#xff08;金刚石&#xff09;、黑钻石&#xff0c;后者则包括人造金刚石、立方氮化硼。 超硬材料制品分类 资料来源&#xff1a;共研产业咨询&#xff08;共研网&#x…

轨迹规划 | 图解动态窗口算法DWA(附ROS C++/Python/Matlab仿真)

目录 0 专栏介绍1 动态障碍建模2 DWA基本原理2.1 采样窗口2.2 评价函数 3 DWA算法流程4 仿真实现4.1 ROS C实现4.2 Python实现4.3 Matlab实现 0 专栏介绍 &#x1f525;附C/Python/Matlab全套代码&#x1f525;课程设计、毕业设计、创新竞赛必备&#xff01;详细介绍全局规划(…

文案配音软件哪个好?(适合新手使用)

随着短视频的逐渐普及&#xff0c;视频博主越来越多&#xff0c;所以很多朋友也期待成为视频博主。但是&#xff0c;如果你想成为一个有名的视频博主&#xff0c;你需要在很多层面上比别人做得更好。其中之一就是视频文字的配音。相信大部分人都没有配音的技巧&#xff0c;所以…

mybatis plus MetaObjectHandler 不生效

首先要知道,spring boot 只会加载启动类同级和下级的bean 如果把bean放在启动类不同的上级目录,是加载不了bean的 如果把mybatisplus的配置文件放在与启动类不同包,就会扫描不到 例如放在这里,就扫描不到 放到这里,就可以扫描到

部署云端SIEM解决方案的5个优势

随着组织迅速转向云端以利用云计算的优势&#xff0c;包括SIEM&#xff08;安全信息与事件管理&#xff09;在内的服务也正在向云端迁移。事实上&#xff0c;SIEM即服务正在迅速崭露头角&#xff0c;成为传统的本地SIEM解决方案的替代品。在Gartner的《采用SaaS SIEM前需回答的…

数学知识总结

素数 质数/素数定义 在大于1的整数中&#xff0c;如果只包含1和本身这两个约数&#xff0c;就被称为质数&#xff0c;或者叫素数 判断素数&#xff08;试除法&#xff09; 约数有一个重要的性质&#xff1a; 假设n代表数字&#xff0c;d代表n的一个约数 即d能整除n(d|n) 那么n…

visual studio安装时候修改共享组件、工具和SDK路径方法

安装了VsStudio后,如果自己修改了Shared路径&#xff0c;当卸载旧版本&#xff0c;需要安装新版本时发现&#xff0c;之前的Shared路径无法进行修改&#xff0c;这就很坑爹了&#xff0c;因为我运行flutter程序的时候&#xff0c;报错找不到windows sdk的位置&#xff0c;所以我…

Windows用VM虚拟机安装MacOS Ventura 13.6系统全流程教程(附资源)

安装成果&#xff1a; 所需容量&#xff1a;至少40GB的硬盘空间&#xff0c;推荐80GB以上。 所需资源 VMware虚拟机激活密钥&#xff1a;VMware Workstation Pro 17.0.2MacOS Ventura 13.6的ISO镜像MacOS的解锁工具卡顿优化工具&#xff1a;beamoff 有人反馈说需要能用的ISO镜…

mysql中特殊字符存储,如表情字符

一.问题&#xff1a;出现下面异常说明是不能存储特殊字符 ### Cause: java.sql.SQLException: Incorrect string value: \xF0\x9F\x98\x81 for column column1 at row 1 ; uncategorized SQLException; SQL state [HY000]; error code [1366]; Incorrect string value: \xF0\x…

UPS 原理和故障案例分享

摘要:不间断电源UPS (Uninterruptible Power System)&#xff0c;主要是由整流器、 逆变器、静态旁路和储能装置等组成;具备高可靠性、高可用性和高质量的独立 电源。通过对收集的 UPS 故障案例进行分析&#xff0c;从施工&#xff0c;调试和运行三个方面筛选 出四个故障案例与…

构建高效问题解答平台:使用Cpolar和Tipas在Ubuntu上搭建专属问答网站

文章目录 前言2.Tipask网站搭建2.1 Tipask网站下载和安装2.2 Tipask网页测试2.3 cpolar的安装和注册 3. 本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3 Cpolar稳定隧道&#xff08;本地设置&#xff09; 4. 公网访问测试5. 结语 前…

什么是实验室超声消泡机?工作原理是怎样的?

超声波消泡设备也叫超声波脱气机、超声波消泡机、超声波消泡器。超声波在液体中产生空化作用,使得液体中溶解的气体(如:空气)不断凝聚,成为很细小的气泡,最后成为球状气泡脱离液体表面&#xff0c;从而达到液体脱气、液体消泡的目的。 实验室超声消泡机工作原理&#xff1a; …