
博弈论
二分抄代码
去了18ec没资格去19ec的反向训练选手
展开
-
codeforces1511G. Chips on a Board
https://codeforces.com/contest/1511/problem/G雅米老师教了我一手倍增做这题,奥妙重重,比题解分块高到不知道哪里去了设f[k][i]表示从i列开始向后的连续2^k的块中所有点到i的距离的异或和f[k][i]=f[k-1][i]+f[k-1][i+2^(k-1)],但是我们发现i+2^(k-1)到i+2^k-1这一段的所有点其实都长度增加了2^(k-1),且由于f[k-1]中所有连续块的长度最多是2^(k-1),所以他们到左边界的值最大是2^(k-1)-1原创 2021-04-14 23:27:30 · 236 阅读 · 0 评论 -
gym102155A Ability Draft
https://codeforces.com/gym/102155/problem/A直接按顺序博弈搜索,维护一队减二队的值,每个人可能有两种选择,要么选当前大招中最大的,要么选普通技能中最大的,如果当前是一队的人就留返回值较大的,否则留返回值较小的由于每个人最多只有4个技能,一共只有10个人,那么其实选大招的不同的位置就只有4^10种可能,剩下的就是直接按顺序选大的#include<bits/stdc++.h>using namespace std; const int m原创 2020-12-06 20:48:39 · 381 阅读 · 0 评论 -
gym102220 Mini-game Before Contest
https://codeforces.com/gym/102220/problem/F在vj跟着现场榜打的,没人开这题,水题啊卧槽,一直在想A题,A题难得一比卧槽,省赛还是要多开题,cf上gym牛逼网友F过了一车。虽然我当时看了这题但是因为没人过所以没有花很多时间想,晚上仔细想想一写就过了用-1表示平局,0表示A获胜,1表示B获胜,b[i]=0/1表示他实际是希望谁赢的,dp[i][j]表示到了第i个点现在是第j个人移动时的状态从没有出度的点开始,此时dp[i][1-6]是谁获胜了都知道了,就是原创 2020-10-16 02:01:29 · 300 阅读 · 0 评论 -
hdu6850 1007 Game 2020杭电多校第7场
我们考虑最长的一条边,如果某个人先手选了这条边两个端点的一个,那么另一个人立刻选另一个,就结束了然后把所有最长的边去掉后,又变成了一个子问题,还是把剩下的边中最长的选出来,这样递归下去那么最后如果只剩1一个点没选,那么1无论选其他的哪个点,都是先手选了一个"最大"边的端点,他必输否则先手必赢#include<bits/stdc++.h>using namespace std;long long x[2005],y[2005];int vis[2005];struct N原创 2020-08-11 17:23:33 · 1160 阅读 · 0 评论 -
codeforces1221E Game With String
https://codeforces.com/problemset/problem/1221/E如果轮到b拿的时候有b<=len<a的情况,那么此时b必胜,因为他总是可以拿下次A要拿的那个,当下次A拿不到了,它就拿这个。如果轮到b拿的时候有2*b<=len的情况,它可以做一个出来,那么还是b必胜。所以A先手需要防止有以上两种情况的出现,也就是如果只存在1个2*b<...原创 2019-09-28 21:26:40 · 173 阅读 · 0 评论 -
hdu6741 MUV LUV UNLIMITED
http://acm.hdu.edu.cn/showproblem.php?pid=6741队友过的,说结论,如果某个叶子节点的父亲有多于1个的儿子节点,先手赢如果全都是直接连向1的链,那么有一条是奇数长度的链,先手英为什么我还得想想。。。。#include<bits/stdc++.h>using namespace std;typedef long long l...原创 2019-09-28 19:32:00 · 392 阅读 · 0 评论 -
codeforces 1215D Ticket Game
https://codeforces.com/problemset/problem/1215/D先手想赢的话,只有4种方案,要么就让左边尽可能大,如果我尽量选左边的?放9,然后后手肯定会让左边选0,右边选9(可能不是9,不过反正是逼近左边)去追上左边,如果无论如何左边都会比右边大,那么先手就肯定赢,即不可能左右相等。剩下就是左边尽可能小,右边大和右边小,都枚举一遍,有一种方案能成立,先手就...原创 2019-09-15 23:57:37 · 689 阅读 · 0 评论 -
Gym - 101666I
规律题,贪心题你站在左边切巧克力,你妹妹站在下方切巧克力,你们都希望黑的更多,其他情况都很显然,只有p%2==1 && q%2==0的时候比较特殊,因为这个时候你可以吧右上方的白块给你妹妹,你妹妹也可以给你,于是看你们怎么取,你在取得奇数列优势为1的时候,你妹妹和你都会选择保守选择2列,2行使得不亏不赚,最后那个拿到右上方白巧克力的一定吃亏。#include<cst...原创 2018-09-28 18:36:54 · 279 阅读 · 0 评论 -
fibonacci博弈
有一堆个数为n的石子,游戏双方轮流取石子,满足:1) 先手不能在第一次把所有的石子取完;2) 之后每次可以取的石子数介于1到对手刚取的石子数的2倍之间(包含1和对手刚取的石子数的2倍)。第一次取任意多个,但不能全部取完,也不能不取,问先手赢还是后手赢先说结论如果n是的fibonacci数,那么就是后手赢,否则是先手赢当n=2,先手只能拿一个,后手赢。假设f[i]为第i个fi...原创 2018-04-18 17:13:36 · 300 阅读 · 0 评论 -
BZOJ4589
由nim游戏的结论可知,就是n堆的数目的亦或和为0时,后手必胜。考虑昨天学的fwt,我们先预处理出有哪些所以对n进行快速幂。然而fwt有个性质,就是fwt2个数组以后,要求f()^n次幂,就是直接把fwt后的数组^n次幂,最后再ufwt回来,得到的答案就是^n幂次后的。不需要每次都对ans和tmp数组乘幂都fwt,ufwt一遍,复杂度会多个logT掉。考场上不知道这个性质,T到怀疑人生原创 2018-01-29 16:22:45 · 328 阅读 · 0 评论 -
codeforces 850c sg函数
我们发现每次只能选质数的倍数,而且各个质数之间是互不影响的,我们先把n个a数质因数分解,对于一个质数p,a1-an中可能存在p^1,p^2,p^k这些不同的质因数的指数,这就是一个nim游戏,对于p,先手赢还是后手赢,最后把各个质数的sg函数求抑或就行了。考场上并没有想到怎样求sg函数,看看题解发现,对于一个质数p,存在1,3,4,..k这些指数,就用二进制存起来表示成一个数,也就是状态压缩,原创 2018-01-22 16:41:42 · 272 阅读 · 0 评论 -
hdu1079
这题就是2001 11 4为先手必败态,然后进行dfs暴力转移,sg数组并不是sg函数值= =。网上还有其他解法,就是利用奇偶性,只有9.30,11.30是不改变奇偶性地,其他都改变。那个貌似几行代码就写完了。、、、我还是太菜了想不到。#include#includeint y,m,d;int day[410];int sg[110][13][32];int mm[13]={0,31,原创 2018-01-21 21:16:16 · 333 阅读 · 0 评论 -
HDU1517
【2,9】stan赢 不用解释【10,18】ollie赢 stan无论第一次乘以哪个数,都ollie赢【19,18*9】stan赢 根据n的大小,stan选择第一次乘的数,使得ollie选9赢不了,而就算ollie选2,那stan都可以选9赢。 【18*9+1,18*9*2】ollie赢 也是一样,无论stan第一次选哪个数,ollie第二次原创 2018-01-21 21:05:31 · 276 阅读 · 0 评论 -
POJ2960
吧n堆分成n个nim游戏分别求sg函数最后求抑或和。sg函数为什么那样求至今搞不懂。。。先当做黑箱用吧。#include#include#include#define maxl 101#define maxh 10010using namespace std;int k,m;int a[maxl],sg[maxh];bool h[maxh];void prework()原创 2018-01-21 20:53:18 · 281 阅读 · 0 评论 -
HDU1847
首先0的时候肯定是先手必败态,而必败态一定可以转化为必胜态,所以对于还剩i个的时候。找到他的后继状态是否有必败态,有一个它就是必胜态,没有一个就是必败态。#include#include#define maxl 1010int n;int a[maxl],ans[maxl];bool ok[maxl];void prework(){ ans[0]=0; for(int i原创 2018-01-21 20:36:30 · 328 阅读 · 0 评论 -
HDU 5973-Game of Taking Stones(威佐夫博弈
找了好久规律。找到后不会做。。。。学习(抄写)了一下javaimport java.math.BigDecimal; import java.util.Scanner; public class Main{ public static void main(String[] args){ BigDecimal two=new BigDecimal(转载 2018-01-21 20:46:34 · 196 阅读 · 0 评论 -
HDU2509
anti-nim模型,若有大于等于2的堆且抑或和>0,或者全是1的堆且疑惑和=0,则先手必胜,否则为后手必胜。#include#define maxl 110int n,ans=0,sum1,sum2;int a[maxl];int main(){ while(~scanf("%d",&n)) { ans=0;sum1=sum2=0; for(int i=1;i<=n原创 2018-01-21 20:43:21 · 348 阅读 · 0 评论