Lieges of Legendre CodeForces - 603C (博弈论,SG找规律)
大意: 给定$n$堆石子, 两人轮流操作, 每次操作两种选择
$(1)$任选非空堆拿走一个石子
$(2)$任选石子数为$2x(x>0)$的一堆, 替换为$k$堆$x$个石子. ($k$给定)
最后无法操作则输, 求谁能赢.
根据$SG$定理可以得到
$sg(x) = \begin{cases} mex\{sg(x-1)\},&\text{$x$为奇} \\ mex\{sg(x-1),sg(\frac{x}{2})\}, & \text{$x$为偶且$k$为奇} \\ mex\{sg(x-1),0\}, & \text{$x$为偶且$k$为偶} \end{cases}$
然后找规律, 可以发现$k$为偶数时有循环节.
$k$为奇数时, $x$为较大的奇数一定必败, 那么就可以省去计算$sg(x-1)$, 只在偶数时计算$sg(\frac{x}{2})$, 这样单次计算$sg$复杂度就为$O(logx)$
#include <iostream>
#define REP(i,a,n) for(int i=a;i<=n;++i)
using namespace std; int n, k;
const int f[]={0,1,0,1,2,0}; int solve(int x) {
if (x<=5) return f[x];
if (x&1) return 0;
int t = solve(x/2);
return t==1?2:1;
} int sg(int x) {
if (k%2==0) {
if (x==1) return 1;
if (x==2) return 2;
return x%2==0;
}
return solve(x);
} int main() {
scanf("%d%d", &n, &k);
int ans = 0;
REP(i,1,n) {
int t;
scanf("%d", &t);
ans ^= sg(t);
}
puts(ans?"Kevin":"Nicky");
}
Lieges of Legendre CodeForces - 603C (博弈论,SG找规律)的更多相关文章
- POJ 1740 A New Stone Game 又是博弈论配对找规律orz 博弈论 规律
http://poj.org/problem?id=1740 这个博弈一眼看上去很厉害很高大上让人情不自禁觉得自己不会写,结果又是找规律…… 博弈一般后手胜都比较麻烦,但是主要就是找和先手的对应关系, ...
- Gym 101147A The game of Osho(SG找规律)
https://vjudge.net/problem/Gym-101147A 题意:给出G组数,每组数包括两个数B,N,两玩家轮流取数,使得N-num,num<=N并且num是N的整次幂.判断谁 ...
- codeforces 615E Hexagons (二分+找规律)
E. Hexagons time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...
- codeforces 353D 递推 找规律
题意:一组男生女生在排队,每秒钟所有排在女生左边的男生与她相邻的女生交换位置,求女生全部换到男生前面的时间. 思路: 解法一:队伍最前面的那些女生不需要交换,后面的女生有两种状态:畅通无阻,前一个女生 ...
- Educational Codeforces Round 8 B 找规律
B. New Skateboard time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- HDU 1847 Good Luck in CET-4 Everybody! (博弈论sg)
Good Luck in CET-4 Everybody! Problem Description 大学英语四级考试就要来临了,你是不是在紧张的复习?或许紧张得连短学期的ACM都没工夫练习了.反正我知 ...
- POJ2505 A multiplication game 博弈论 找规律
http://poj.org/problem?id=2505 感觉博弈论只有找规律的印象已经在我心中埋下了种子... 题目大意:两个人轮流玩游戏,Stan先手,数字 p从1开始,Stan乘以一个2-9 ...
- codeforces 603C. Lieges of Legendre sg函数
题目链接 n堆石子, 可以拿走一堆中的一颗, 或者将一堆数量为2*x的石子分为k堆x个的石子.k由题目给出. k分奇偶讨论. k为偶数时,k堆x个的石子异或结果为0: k为奇数时, k堆x个石子异或结 ...
- 【博弈论】【SG函数】【找规律】Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined) E. Game of Stones
打表找规律即可. 1,1,2,2,2,3,3,3,3,4,4,4,4,4... 注意打表的时候,sg值不只与剩下的石子数有关,也和之前取走的方案有关. //#include<cstdio> ...
随机推荐
- springmvc配置mybatis与hibernate的不同点
相信每个人对springmvc+hibernate或者springmvc+mybatis都不会陌生,拿来一个项目也都会开发.但是自己配置的情况下却很少,即使自己配置过,长时间不写也会忘,在这里记录一下 ...
- Redis 命令使用
Redis 中所有 key-value 都储存在 Redis-Object 中,Redis-Object 主要信息有: 数据类型(type) string (字符串) hash (Hash表) lis ...
- OpenJudge计算概论-分数求和
/*====================================================== 1006:分数求和 总时间限制: 1000ms 内存限制: 65536kB 描述 输入 ...
- 8.3 Customizing Git - Git Hooks
https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks https://github.com/git/git/blob/master/temp ...
- el-table的type="selection"的使用
场景:el-table,type="selection"时,重新请求后,设置列表更新前的已勾选项 踩坑:在翻页或者changPageSize之后,table的data会更新,之前勾 ...
- Javascript——概述 && 继承 && 复用 && 私有成员 && 构造函数
原文链接:A re-introduction to JavaScript (JS tutorial) Why a re-introduction? Because JavaScript is noto ...
- [AI] 深度数学 - Bayes
数学似宇宙,韭菜只关心其中实用的部分. scikit-learn (sklearn) 官方文档中文版 scikit-learn Machine Learning in Python 一个新颖的onli ...
- 导出 VuePress构建的网站为 PDF
前言 学 Rust 也有一段时间了,网上也有不少官方文档的中文翻译版,但是似乎只有 Rust中文网站 文档一直是最新的,奈何并没有 PDF 供直接下载,是在是不太方便,为了方便阅读以及方便后续文档更新 ...
- spring redistemplate中setHashValueSerializer的设置
笔者曾经对redis键值使用了不同类型的序列化方法 用过默认值.JdkSerializationRedisSerializer.StringRedisSerializer还用改以下自定类型的序列化工具 ...
- 【Leetcode_easy】617. Merge Two Binary Trees
problem 617. Merge Two Binary Trees 参考 1. Leetcode_easy_617. Merge Two Binary Trees; 完