AT2305-[AGC010D]Decrementing【博弈论】
正题
题目链接:https://www.luogu.com.cn/problem/AT2305
题目大意
\(n\)个数字两个人进行博弈,每个人的操作为
- 选择一个大于1的数字减一
- 之后所有数字除以所有数字的\(gcd\)
无法操作者败,保证初始所有数字互质
求是否先手必胜
\(1\leq n\leq 10^5\)
解题思路
好妙的题目,先不考虑除\(gcd\)的话,那么就是考虑\(\sum_{i=1}^n(a_i-1)\)的奇偶性。
假设目前为奇状态,那么先手的目的显然是要保持这个奇数状态,注意到如果减去后除以的是一个奇数那么状态显然后手无法改变,所以只要保证序列中有奇数即可,因为如果要有偶数那么就可以减去这个偶数变成奇数先手显然可以保持状态不变。
如果目前为偶状态,那么先手的目前就是要减去后任然是偶状态,那么只有可能除以一个偶数,也就是要让所有的数字都变成偶数。如果奇数个数大于\(1\)显然不可行,否则减去这个\(1\)后进行一个子任务的博弈即可。
最多这样\(log\ a_i\)次所以时间复杂度\(O(n\log^2 a_i)\)
code
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e5+10;
int n,a[N];
int main()
{
scanf("%d",&n);
bool k=1,one=0;
int s=0,z=0;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
s+=a[i]-1;z+=(a[i]&1);
one|=(a[i]==1);
}
while(1){
if(s&1)return puts(k?"First":"Second")&0;
if(one)return puts(k?"Second":"First")&0;
if(z==1){
for(int i=1;i<=n;i++)
if(a[i]&1){a[i]--;break;}
int d=0;z=one=s=0;
for(int i=1;i<=n;i++)d=__gcd(a[i],d);
for(int i=1;i<=n;i++){
a[i]/=d;s+=a[i]-1;
z+=(a[i]&1);one|=(a[i]==1);
}
k=!k;
}
else return puts(k?"Second":"First")&0;
}
return 0;
}
AT2305-[AGC010D]Decrementing【博弈论】的更多相关文章
- AtCoder刷题记录
构造题都是神仙题 /kk ARC066C Addition and Subtraction Hard 首先要发现两个性质: 加号右边不会有括号:显然,有括号也可以被删去,答案不变. \(op_i\)和 ...
- NOIp2018模拟赛三十六
好久没打模拟赛了...今天一样是两道国集,一道bzoj题 成绩:13+0+95=108 A题开始看错题了...导致样例都没看懂,结果xfz提醒我后我理解了一个我自认为正确的题意(事实证明我和xfz都错 ...
- 【AGC010D】Decrementing
Solution 日常博弈论做不出来. 首先,数值全部为1的局面先手必败. 在接下来的过程中,我们只关注那些大于1的数值. 按照官方题解的思路,首先想一个简化版的问题:没有除的操作,其余相同.那么局面 ...
- IT人生知识分享:博弈论的理性思维
背景: 昨天看了<最强大脑>,由于节目比较有争议性,不知为什么,作为一名感性的人,就想试一下如果自己理性分析会是怎样的呢? 过程是这样的: 中国队(3人)VS英国队(4人). 1:李建东( ...
- [poj2348]Euclid's Game(博弈论+gcd)
Euclid's Game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9033 Accepted: 3695 Des ...
- 博弈论揭示了深度学习的未来(译自:Game Theory Reveals the Future of Deep Learning)
Game Theory Reveals the Future of Deep Learning Carlos E. Perez Deep Learning Patterns, Methodology ...
- TYVJ博弈论
一些比较水的博弈论...(为什么都没有用到那什么SG呢....) TYVJ 1140 飘飘乎居士拯救MM 题解: 歌德巴赫猜想 #include <cmath> #include < ...
- Codeforces 549C. The Game Of Parity[博弈论]
C. The Game Of Parity time limit per test 1 second memory limit per test 256 megabytes input standar ...
- 【POJ】2234 Matches Game(博弈论)
http://poj.org/problem?id=2234 博弈论真是博大精深orz 首先我们仔细分析很容易分析出来,当只有一堆的时候,先手必胜:两堆并且相同的时候,先手必败,反之必胜. 根据博弈论 ...
随机推荐
- RHEL 7 “There are no enabled repos” 的解决方法
RHEL 7 "There are no enabled repos" 的解决方法 [root@system1 Desktop]# yum install squidLoaded ...
- [转]C# 互操作性入门系列(二):使用平台调用调用Win32 函数
传送门 C#互操作系列文章: C# 互操作性入门系列(一):C#中互操作性介绍 C# 互操作性入门系列(二):使用平台调用调用Win32 函数 C# 互操作性入门系列(三):平台调用中的数据封送处理 ...
- WPF/Winform 图表库LiveCharts
早前的博客,自己动手写了几个图表饼状图,柱形图,折线图等,重在思路. 那么如果你不想这么麻烦自己动手,有没有现成的图表库那? 当然有,虽然我也刚开始用没多久,不过还是对这么良心的项目充满了敬佩!! g ...
- 页面的跳转MVVM,带参数的传递
主页面 -------------------------- <Page x:Class="CheckMemoryLeak.MainPage" xmlns="htt ...
- 【转载】vim 中文帮助手册的安装
本文出处http://hi.baidu.com/bkhcvzdvmjfkpyr/item/9c238224c1a69498b6326360 vim自带的帮助手册是英文的, 对平时编程的人来说没有多大阅 ...
- canvas——离屏
离屏操作: 1.创建一个新的离屏canvas; 2.把一些复杂额绘画操作(背景),画在离屏canvas上: 3.将离屏canvas通过drawImage(离屏canvas对象,x1,y1,offcan ...
- springboot系列总结(二)---springboot的常用注解
上一篇文章我们简单讲了一下@SpringBootApplication这个注解,申明让spring boot自动给程序进行必要的配置,他是一个组合注解,包含了@ComponentScan.@Confi ...
- thinkphp5.x在函数禁用的情况下绕过
描述 测试的时候发现一个thinkphp的网站,有tp5的漏洞但无法执行命令,但没机会进行后续测试,所有在这里自己搭建环境进行复现一下. 使用的是tp5.0.16 一开始使用网上的payload打一直 ...
- Sentry-CLI 使用详解(2021 Sentry v21.8.x)
内容源于:https://docs.sentry.io/platforms/javascript/guides/vue/ 系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创 ...
- 性能测试工具JMeter 基础(九)—— 测试元件: 逻辑控制器之交替控制器
交替控制器:根据被控制器触发执行次数,去依次执行控制器下的子节点(逻辑控制器.采样器),可以由线程组的线程数.循环次数.逻辑控制器触发. 交替控制器(lnterleave Controller) 简单 ...