CF1369F-BareLee【博弈论,SG函数】
正题
题目链接:https://www.luogu.com.cn/problem/CF1369F
题目大意
TTT次游戏,每次给出一个sss和ttt,两个人轮流操作,可以让s=s+1s=s+1s=s+1或者s=s×2s=s\times 2s=s×2,如果s>ts>ts>t的话那个人就输了。
每次输的人将作为下一次的先手,最后一把决定胜负。
求第一次先手的人是否有必胜/必败策略。
1≤s≤t≤1018,1≤T≤1051\leq s\leq t\leq 10^{18},1\leq T\leq 10^51≤s≤t≤1018,1≤T≤105
解题思路
先考虑一把里面是否有必胜策略,考虑用SGSGSG函数去求,因为我们只需要维护SGSGSG为000和不为000的信息就好了。
如果一个状态不能走到任何000状态那么这个节点就是000状态,为了方便,后面的SG=2SG=2SG=2都视为SG=1SG=1SG=1。
首先⌊t2⌋+1∼t\lfloor\frac{t}{2}\rfloor+1\sim t⌊2t⌋+1∼t这个范围中因为×2\times 2×2用不了,所以这个范围肯定是010101交错的。
然后考虑从t2\frac{t}{2}2t开始往前每个状态都会额外指向一个乘二后的值,如果也就是前面010101交错中每次跳两个,所以要么指向的都是000要么指向的都是111,如果指向的都是000,那么后面就有一段都是111,否则如果指向的是111显然不会产生影响,依旧是010101交错。
然后让ttt继续除二,然后考虑如果后面是连续111段我们不需要考虑任何东西,如果后面是010101交错就继续按照前面的做,直到到这段包括sss我们就可以得到sss的SGSGSG值了。
然后考虑必败,最后一步肯定是×2\times 2×2,所以我们直接让t=⌊t2⌋t=\lfloor\frac{t}{2}\rfloort=⌊2t⌋,然后看是否必胜,这就是能否必败的答案了。
然后反过来dpdpdp一次就可以得到答案了。
时间复杂度:O(Tlogt)O(T\log t)O(Tlogt)
code
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=1e5+10;
ll n,p[N][2],f[N][2];
bool check(ll s,ll t){bool now=0,k=0;ll r=t;while(t/2>=s){if(now)now=0,r=t/2;else now=k^!(t&1);t/=2;k=(r-t)&1;}return now|((r-s)&1);
}
signed main()
{scanf("%lld",&n);for(ll i=1,s,t;i<=n;i++){scanf("%lld%lld",&s,&t);p[i][0]=check(s,t);if(t/2>=s)p[i][1]=check(s,t/2);else p[i][1]=1;}f[n][0]=p[n][0];f[n][1]=p[n][1];for(ll i=n-1;i>=1;i--){f[i][0]=(f[i+1][0]&p[i][1])|((!f[i+1][0])&p[i][0]);f[i][1]=(f[i+1][1]&p[i][1])|((!f[i+1][1])&p[i][0]);}printf("%lld %lld\n",f[1][0],f[1][1]);return 0;
}
CF1369F-BareLee【博弈论,SG函数】相关推荐
- hdu1847-Good Luck in CET-4 Everybody! (博弈论 SG函数 找规律)
Good Luck in CET-4 Everybody! Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- [AcWing] 1319.移棋子游戏 博弈论 Sg函数板子题
题目链接:1319.移棋子游戏 题解 好久没写博弈论的题了,写几道复习一下,博弈论SG主要由两大部分组成:SG函数和SG定理 SG(x)=mex(S),其中S是x的后继状态的SG函数值集合,mex(S ...
- 网络与社会导论博弈论SG函数
课上学习纳什均衡之后,经查找博理论相关资料,了解到巴什博奕.威佐夫博弈和SG函数等经典的模型,而SG函数正是处理一些博弈论问题的很好的办法,下面对其进行介绍. 我们来研究一个一般的游戏:给定一个有向无 ...
- 2016多校联合训练1 B题Chess (博弈论 SG函数)
题目大意:一个n(n<=1000)行,20列的棋盘上有一些棋子,两个人下棋,每回合可以把任意一个棋子向右移动到这一行的离这个棋子最近的空格上(注意这里不一定是移动最后一个棋子),不能移动到棋盘外 ...
- 【NOI模拟赛】纸老虎博弈(博弈论SG函数,长链剖分)
题面 某天,C 和 K 觉得很无聊,于是决定玩一个经典小游戏: 在一棵有 nnn 个结点的有根树上,标号为 iii 的节点上有 aia_iai 个棋子.游戏时玩家轮流操作,每次可以将任意一个节点 u ...
- 博弈论-SG函数和SG定理
1.SG函数和SG定理是一个十分神奇的东西,有了它,绝大部分的博弈都可以被统一到这个上面,都可以使用SG函数解决.是一种解决博弈问题的十分方便的手段. 2.首先给出一些基本的定义:mex运算,这个是作 ...
- 博弈论SG函数-算法介绍及例题
一. 基本概念: 1. Impartial Combinatorial Games(ICG) 公平组合游戏: 1. 两名选手 2. 交替进行某种游戏规定的操作,每操作一次,选手可以在有限的操作(操作 ...
- 博弈论sg函数——《移旗子游戏》《剪纸游戏》
传送门:移棋子游戏 思路:按照sg函数定义,在这道题里面,不能移动的状态就是终点态,sg值设为0,其余所有的点的sg函数值就是属于其所有后继节点的sg函数值组成的集合里面非集合元素的最小的一个数字,也 ...
- 博弈论、SG定理和SG函数
巴什博奕 巴什博弈:一堆物品有n个,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个.最后取光者得胜. 结论: 如果n%(m+1)==0 ,那么先手必败,否则后手必败 首先我们引入PN点概念 ...
最新文章
- SQL Server 2008数据库,显示正在恢复,想把它删了结果删除不了
- 连接maven_Maven系列——超简单入门级教程
- HTML+CSS+JS实现 ❤️响应式图文卡片滑块展示特效❤️
- ZOJ2724_Windows Message Queue(STL/优先队列)
- Beacon API
- 主键、聚集索引、非聚集索引区别
- 「mac操作指南」WidsMob HEIC将HEIC/HEIF 转换为 JPEG/PNG/TIFF格式
- 编译原理完整学习笔记(七):优化代码
- linux下 iptables 的配置
- SOMEIP报文格式部分字段概述(二)
- 百万用户同时在线游戏服务器架构实现.doc 基于epoll 通信模型
- 探索Whisper语音识别
- MasterCAM螺旋线的两种画法:螺旋线命令和插件方法
- OPENFILER构建软iSCSI multipath实现多路径聚合(一)
- html中collapse代码怎么写,CSS里的visibility属性有个鲜为人知的属性值:collapse
- python读取word内容复制粘贴,Python读取word文本操作详解
- 华摄氏度和摄氏度的转换 华摄氏度转化摄氏度 使用带运算的宏定义
- Centos7下安装部署Zabbix-server 3.4
- “低碳生活”成时尚 加密狗网上支付帮大忙
- 基于Android平台的ffmpeg编译
热门文章
- php json.parse,JSON.parse()与JSON.stringify()和eval()使用方法详解
- mysql binlog 大数据_后起之秀 | MySQL Binlog增量同步工具go-mysql-transfer实现详解
- python柱状图挨在一起_echarts多个柱状图展示问题(bar都挤到一起了)
- 计算机竞赛游戏探险岛,冒险岛2五大全新团本综合分析
- android最好的3d游戏机,终极盘点:Android必玩十大超猛3D游戏
- linux accept过程,Linux协议栈accept和syn队列问题
- 计算机基础知识菜鸟教程,机器学习基础知识整理归纳
- java获取机器号_(转)JAVA获得机器码的实现
- 递归函数斐波那契数列python_使用Python函数递归实现斐波那契数列时为什么运行速度很慢?...
- 用计算机组成原理+唐朔飞的,计算机组成原理 唐朔飞 习题解答