Codeforces 1190C. Tokitsukaze and Duel】的更多相关文章

传送门 注意到后手可以模仿先手的操作,那么如果一回合之内没法决定胜负则一定 $\text{once again!}$ 考虑如何判断一回合内能否决定胜负 首先如果最左边和最右的 $0$ 或 $1$ 距离小于等于 $k$,那么先手显然赢 如果最左边和最右的 $0$ 和 $1$ 中间都差了大于等于 $k$ 个位置,那么考虑后手能不能赢 枚举一下先手第一步即可(代码因为比赛是写的,比较奇怪,我感觉也不用参考代码吧..) #include<iostream> #include<cstdio>…
题意:有一个长为n的01串,两个人轮流操作,每个人可以把某个长度为m的区间变成相同颜色,谁在操作后整个串颜色相同就赢了.问最后是谁赢?(有可能平局) 思路:容易发现,如果第一个人不能一击必胜,那么他就会向平局发展.同理,如果第二个人不能在第一个人的所有第一步的可能走法之后都能一击必胜,那么他也会向平局发展.所有,问题转化为了第一个人能不能一击必胜,第二个人能不能在第一步的所有走法之后一击必胜. 先考虑第一个人,我们只要判断能不能找到一个区间,使得这个区间的颜色相同之后,向左右延伸可以到串的两端即…
https://codeforc.es/contest/1191/problem/E 参考自:http://www.mamicode.com/info-detail-2726030.html 和官方题解. 首先这种组合游戏,必定存在一种不败策略.一种很直观的理解就是,假如没有办法一开始就胜利,那么就优先考虑和局的. 假如有连续k个一样的,那么先手可以进行一次无效翻转变成后手,所以这种情况先手必然至少和局.这样的话一次翻转之后就必然有连续k个一样的,后手也必定有了至少和局的机会,他也进行一次无效翻…
[Codeforces 1191D] Tokitsukaze, CSL and Stone Game(博弈论) 题面 有n堆石子,两个人轮流取石子,一次只能从某堆里取一颗.如果某个人取的时候已经没有石子,或者取完后又两堆石子个数相同(个数为0也算).假如两人都足够聪明,问谁能赢. 分析 贪心考虑,最后局面一定是0~n-1的一个排列.这时谁取谁就输.因此我把a[i]从小到大排序,把a[i]变成i-1,可以计算出取的石子个数\(\sum (a_i-i+1)\),如果是奇数,则先手胜,否则后手胜. 但…
"Duel!" Betting on the lovely princess Claris, the duel between Tokitsukaze and Quailty has started. There are nn cards in a row. Each card has two sides, one of which has color. At first, some of these cards are with color sides facing up and o…
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard output "Duel!" Betting on the lovely princess Claris, the duel between Tokitsukaze and Quailty has started. There are n cards in a row. Each card h…
大意: 给定01串, 两人轮流操作, Tokitsukaze先手. 每次操作可以选择长为$k$的区间, 全部替换为$0$或$1$, 若替换后同色则赢. 求最后结果. 先判断第一步是否能直接赢, 不能的话若所有后继都是必败则必败, 否则平局. 正确性很显然, 因为一次操作不能直接赢的话, 只要模仿对手操作一定能平局. 那么问题就转化为判断一步操作后是否能赢. 假设$0$的最大范围为$[L[0],R[0]]$,$1$的最大范围为$[L[1],R[1]]$, 那么只要操作前$R[0]-L[0]+1\l…
https://codeforces.com/contest/1191/problem/F 看了一下题解的思路,感觉除了最后一段以外没什么启发. 首先离散化x加快速度,免得搞多一个log.其实y不需要离散化. 规定无穷大就是xn+1这个很好理解嘿嘿.(反正开多了5个不怕) 注意到其实从上往下一行一行扫过去,每次必须新增的元素才是新的集合,那很容易想到一个不重不漏的办法就是每次计算"以点p[i]为加进去的新点中的结束的集合",那么假设一开始p[i]的左侧有cntl个点,那么显然有(cnt…
https://codeforces.com/contest/1191/problem/C 一开始想象了一下,既然每次删除都是往前面靠,那么好像就是页数*页容量+空位数=最多容纳到的坐标. 至于为什么呢?好像是每次都会删除干净的原因,从第一页开始考虑,第一页可以容纳到5,这个很显然. 删除之后有2个空位,然后可以容纳到7.再把7也删除,就可以容纳到8. 那么每次就暴力删除特殊元素就可以了,反正最多就是m个. 问题在于翻页的时候不能够简单的curpage++,这样必定翻车.我是直接二分,因为顶多就…
https://codeforces.com/contest/1191/problem/B 小心坎张听的情况. #include<bits/stdc++.h> using namespace std; string s[3]; int main() { #ifdef Yinku freopen("Yinku.in", "r", stdin); //freopen("Yinku.out", "w", stdout);…