题目链接


\(Description\)

给定\(n\)个数\(A_i\),且这\(n\)个数的\(GCD\)为\(1\)。两个人轮流进行如下操作:

  1. 选择一个\(>1\)的数使它\(-1\)。
  2. 第一步进行完后,所有数会变成它除以\(g\),其中\(g\)是\(n\)个数的\(GCD\)。

    当轮到一个人操作,但所有数为\(1\)时,该人输。求先手是否必胜。

    \(n\leq10^5,\ A_i\leq10^9\)。

\(Solution\)

首先能发现一些性质:

  1. 当有一个数变成\(1\)时,答案只和所有数的和\(-n\)的奇偶性有关。
  1. 对所有数除以一个奇数,任意一个数的奇偶性不变;除以一个偶数,奇偶性不确定。
  2. \(g\neq1\)时,除以\(g\)的操作不会进行超过\(30\)次。

考虑先手。

假设当前\(\sum(A_i-1)\)的奇偶性为奇数,即处于优势,那么他应该保持操作完(所有数除以\(g\)后)所有数的奇偶性还是偶数。

注意到当有至少一个奇数时,\(GCD\)不可能为偶数。而最初所有数的\(GCD\)为\(1\),那么至少有一个奇数。另外此时偶数有奇数个,如果任意修改一个偶数,\(g\)一定还是奇数。

考虑现在的后手。先手进行上述操作后存在至少两个奇数,所以一定不能使\(g\)变为偶数来改变局面。而先手可以保持奇数的个数一直增加,所以后手没法翻盘,必败。

如果当前\(\sum(A_i-1)\)的奇偶性为偶数,即处于劣势,那么先手要使操作后的\(g\)变为偶数才可能翻盘。

由上面的分析,如果存在\(>1\)个的奇数,先手必败。否则先手只能修改这个奇数让\(g\)变成偶数。但是现在仍不能判断胜负,继续递归下一层。

最多递归\(\log\)层,所以复杂度\(O(n\log A)\)。(似乎还有个求\(\gcd\)...)


//32ms	896KB
#include <cstdio>
#include <cctype>
#include <algorithm>
#define gc() getchar()
#define MAXIN 300000
//#define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
typedef long long LL;
const int N=1e5+5; int n,A[N];
char IN[MAXIN],*SS=IN,*TT=IN; inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-48,c=gc());
return now;
}
bool DFS(bool now)
{
int s=0,fg=0;
for(int i=1; i<=n; ++i) A[i]==1&&(fg=1), s+=A[i]&1;
if((n-s)&1) return now;
if(fg||s>1) return now^1;
for(int i=1; i<=n; ++i)
if(A[i]&1) {--A[i]; break;}
int g=A[1];
for(int i=2; i<=n; ++i) g=std::__gcd(g,A[i]);
for(int i=1; i<=n; ++i) A[i]/=g;
return DFS(now^1);
} int main()
{
const int n=read(); ::n=n;
for(int i=1; i<=n; ++i) A[i]=read();
puts(DFS(1)?"First":"Second"); return 0;
}

AGC 010D.Decrementing(博弈)的更多相关文章

  1. RE:从零开始的AGC被虐(到)生活(不能自理)

    RE:从零开始的AGC被虐(到)生活(不能自理) 「一直注视着你,似近似远,总是触碰不到.」 --来自风平浪静的明天 AtCoder Grand Contest 001 B: Mysterious L ...

  2. [AtCoderContest010D]Decrementing

    [AtCoderContest010D]Decrementing 试题描述 There are \(N\) integers written on a blackboard. The \(i\)-th ...

  3. hdu----(1849)Rabbit and Grass(简单的尼姆博弈)

    Rabbit and Grass Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  4. HDU 5754 Life Winner Bo 组合博弈

    Life Winner Bo Problem Description   Bo is a "Life Winner".He likes playing chessboard gam ...

  5. HDU 2509 Nim博弈变形

    1.HDU 2509  2.题意:n堆苹果,两个人轮流,每次从一堆中取连续的多个,至少取一个,最后取光者败. 3.总结:Nim博弈的变形,还是不知道怎么分析,,,,看了大牛的博客. 传送门 首先给出结 ...

  6. HDU 1907 Nim博弈变形

    1.HDU 1907 2.题意:n堆糖,两人轮流,每次从任意一堆中至少取一个,最后取光者输. 3.总结:有点变形的Nim,还是不太明白,盗用一下学长的分析吧 传送门 分析:经典的Nim博弈的一点变形. ...

  7. 51nod1072(wythoff 博弈)

    题目链接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1072 题意: 中文题诶~ 思路: 博弈套路是有的, 找np局 ...

  8. ACM: NBUT 1107 盒子游戏 - 简单博弈

     NBUT 1107  盒子游戏 Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format:  Practice  Appoint ...

  9. 【转】ACM博弈知识汇总

    博弈知识汇总 转自:http://www.cnblogs.com/kuangbin/archive/2011/08/28/2156426.html 有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍 ...

随机推荐

  1. C++ Primer 笔记——命名空间

    1.我们既可以用 using 声明整个空间,也可以声明部分名字. using namespace std; using std::cout; 2.头文件不应包含 using 声明,因为头文件会拷贝到所 ...

  2. Docker 快速删除所有容器

    查看运行容器 docker ps 查看所有容器 docker ps -a 进入容器 其中字符串为容器ID: docker exec -it d27bd3008ad9 /bin/bash 1.停用全部运 ...

  3. js两种写法执行速度比较

    记录 function test1(){ this.say = function(){} } function test2(){ this.say = function(){} return this ...

  4. ffmpeg切割视频

    using System.Diagnostics; public static void carveVideo() { var inputpath = @"d:\1.mp4"; v ...

  5. ConfigurationManager 类的使用

    一.引用 命名空间:   System.Configuration程序集:  System.Configuration(位于 System.Configuration.dll) 二.示例 1.读取.增 ...

  6. Py学生信息管理系统 案例(优化版)

    # 第一题:设计一个全局变量,来保存很多个学生信息:学生(学号, 姓名,年龄):思考要用怎样的结构来保存:# 第二题:在第一题基础上,完成:让用户输入一个新的学生信息(学号,姓名,年龄):你将其保存在 ...

  7. python is和==的区别

    # ==和is # ==用来判断值是否相等# is是用看来判断是不是指定了同一个东西,判断是不是指向了同一个地址等 a = [11,22,33]b = [11,22,33] a == b # True ...

  8. 小程序:最难点For的wx:key

    转自:http://www.wxappclub.com/topic/536 A:数据改变,导致重新渲染的两种情况: 1:有wx:key的情况(不重新创建,仅改变顺序) 添加元素或改变元素顺序导致数据改 ...

  9. python---hash查找

    以前只会用,没了解过原理. # coding = utf-8 class HashTable: def __init__(self): # 哈希表的初始大小已经被选择为 11.尽管这是任意的,但是重要 ...

  10. [转]解决-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable and mvn script match.

    来源:http://www.cnblogs.com/sprinng/p/5141233.html 1.添加M2_HOME的环境变量 2.Preference->Java->Installe ...