BZOJ 1115: [POI2009]石子游戏Kam】的更多相关文章

1115: [POI2009]石子游戏Kam Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 883  Solved: 545[Submit][Status][Discuss] Description 有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数.两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要保证操作后仍然满足初始时的条件谁没有石子可移时输掉游戏.问先手是否必胜. Input 第一行u表示数据组数.对于每组数据,第一行…
1115: [POI2009]石子游戏Kam Time Limit: 10 Sec  Memory Limit: 162 MB Description 有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数.两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要保证操作后仍然满足初始时的条件谁没有石子可移时输掉游戏.问先手是否必胜. Input 第一行u表示数据组数.对于每组数据,第一行N表示石子堆数,第二行N个数ai表示第i堆石子的个数(a1<=a2<=……<=an). 1…
题目链接:BZOJ - 1115 题目分析 首先看一下阶梯博弈: 阶梯博弈是指:初始有 n 堆石子,每次可以从任意的第 i 堆拿若干石子放到第 i - 1 堆.最终不能操作的人失败. 解法:将奇数位的石子堆做最基本的 NIM 就可以了. WHY:对奇数位做 NIM 的必胜者总是可以胜利,因为如果从奇数位拿石子到偶数位,就相当于把这些石子拿走了,就是 NIM :如果必败者从偶数位将石子拿到奇数位,必胜者总是可以将这些石子再向前移一个位置,就又放到了偶数位,这样一直移动的话,最终会是必胜者将这些石子…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1115 [题目大意] 有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数. 两人轮流操作每次操作可以从一堆石子中移走任意多石子, 但是要保证操作后仍然满足初始时的条件谁没有石子可移时输掉游戏.问先手是否必胜. [题解] 我们定义最后一堆以及下标与其相差为偶数的堆为偶堆石子,其余的为奇堆石子, 我们发现不管奇堆石子做什么操作,只要在偶堆石子中做相应的操作就可以抵消, 因此决定…
传送门 有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数.两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要保证操作后仍然满足初始时的条件谁没有石子可移时输掉游戏.问先手是否必胜. 一眼差分,然后,这不是阶梯$NIM$吗? 阶梯$NIM$只考虑奇数位置进行$NIM\ \oplus$起来就可以了,因为偶数位置是对称的我们有平衡的操作 #include <iostream> #include <cstdio> #include <cstring> #i…
BZOJ 洛谷 \(Description\) 有\(n\)堆石子.除了第一堆外,每堆石子个数都不少于前一堆的石子个数.两人轮流操作,每次可以从一堆石子中拿掉任意多的石子,但要保证操作后仍然满足初始时的条件.谁没有石子可拿时输.求先手是否必胜. \(Solution\) 限制条件就是相邻两个数的差非负.那么记查分数组\(d_i=a_i-a_{i-1}\).假设拿走第\(i\)堆的\(x\)个石子,影响是\(d_i\)-=\(x\),\(d_{i+1}\)+=\(x\),就相当于从\(d_i\)中…
http://www.lydsy.com/JudgeOnline/problem.php?id=1115 题意:n堆石子,个数是从左到右单增.每一次可以从任意堆取出任意石子,但要保持单增这个性质.问先手是否必胜(n<=1000, a[i]<=10000) #include <bits/stdc++.h> using namespace std; int n, a[1005]; int main() { int T; scanf("%d", &T); wh…
[BZOJ1115][POI2009]石子游戏Kam Description 有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数.两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要保证操作后仍然满足初始时的条件谁没有石子可移时输掉游戏.问先手是否必胜. Input 第一行u表示数据组数.对于每组数据,第一行N表示石子堆数,第二行N个数ai表示第i堆石子的个数(a1<=a2<=……<=an). 1<=u<=10 1<=n<=1000 0<=…
有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数.两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要保证操作后仍然满足初始时的条件谁没有石子可移时输掉游戏.问先手是否必胜. 首先直接考虑题中的条件并没有办法入手 每堆石子的个数不少于前一堆石子的个数可以看成是相邻两堆石子时间的个数差保持>=0 于是可以把这些石子差看做石子 每次操作会将其中一堆石子减去一个值,又会将它后面的一堆加上相等的值 就可以看做是把这一堆推到它后面的一堆 于是转化成了阶梯博弈 阶梯博弈 描述大概就是:…
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1115 观察问题,我们能发现前后相邻两堆石子的数量差一定非负,而我们在第i堆石子中移走k个石子,那么第i堆与第i-1堆石子的数量差就减少k,第i+1堆与第i堆的数量差增加k.这样就转化为了一个经典的博弈论游戏:阶梯游戏.我们把第i堆石子移走k个,那么就相当于把阶梯上第i堆与第i-1堆石子的差那一级移k个石子到第i+1堆与第i堆的差那一级上(往下移一级).于是就有一个结论:阶梯游戏的结果…