https://codeforc.es/contest/1194/problem/D

打个n=30的表好像看出了规律。

其实假设k==3,那么

sg[0]=0,

sg[1]=mex{sg[0]}=1,

sg[2]=mex{sg[0],sg[1]}=2,

sg[3]=mex{sg[0],sg[1],sg[2]}=3,

sg[4]=mex{sg[1],sg[2],sg[3]}=0,

sg[5]=mex{sg[2],sg[3],sg[4]}=1,

sg[6]=mex{sg[3],sg[4],sg[5]}=2,

sg[7]=mex{sg[4],sg[5],sg[6]}=3,

sg[8]=mex{sg[5],sg[6],sg[7]}=0.

也不太清楚sg函数的具体意义是什么。不过可以看出规律。其实大概可以猜出来就是0,1,2,3循环。策略就是一开始先手是4倍数必败的,无论先手选什么,后手总可以掏出一个数使它凑出一个4。一直到0,而模4余非零数的话就相当于出让先手。

再假设k==4,那么

sg[0]=0,

sg[1]=mex{sg[0]}=1,

sg[2]=mex{sg[0],sg[1]}=2,

sg[3]=mex{sg[1],sg[2]}=0,

sg[4]=mex{sg[0],sg[2],sg[3]}=1,

sg[5]=mex{sg[1],sg[3],sg[4]}=2,

sg[6]=mex{sg[2],sg[4],sg[5]}=0,

sg[7]=mex{sg[3],sg[5],sg[6]}=1,

sg[8]=mex{sg[4],sg[6],sg[7]}=2.

又可以看出规律。可以归纳出来就是0,1,2循环。策略就是一开始先手是3倍数必败的,无论先手选什么,后手总可以掏出一个数使它凑出一个3或者6。一直到0,而模3余非零数的话就相当于出让先手。

然后解法就很好理解了,可以dp算出小数据的时候的分布情况,总能找到一些必胜状态,而这个时候就很玄学了。当k不是3的倍数的时候。无论是选1,2还是k,都有办法凑一个数变成3的倍数。所以必败状态的点再加若干个3的倍数也是必败。???

管他什么东西呢反正sg函数有规律。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll; //bool dp[1005]; int main() {
#ifdef Yinku
freopen("Yinku.in", "r", stdin);
//freopen("Yinku.out", "w", stdout);
#endif // Yinku
//dp[0]=0;
//dp[i]=1,when dp[i-1]=0||dp[i-2]=0||dp[i-k]=0,else 0
int q;
while(~scanf("%d", &q)) {
while(q--) {
int n, k;
scanf("%d%d", &n, &k);
// dp[0] = 0;
// for(int i = 1; i <= n; i++) {
// dp[i] = 0;
// if(i - 1 >= 0)
// dp[i] |= !dp[i - 1];
// if(i - 2 >= 0)
// dp[i] |= !dp[i - 2];
// if(i - k >= 0)
// dp[i] |= !dp[i - k];
// }
// for(int i = 0; i <= n; i++) {
// printf("%2d ", i);
// }
// printf("\n");
// for(int i = 0; i <= n; i++) {
// printf("%2d ", dp[i]);
// }
// printf("\n"); bool BobWin=true;
if(k%3==0){
n%=(k+1);
if(n%3)
BobWin=false;
if(n==k)
BobWin=false;
}
else{
if(n%3)
BobWin=false;
} puts(BobWin?"Bob":"Alice");
}
}
}

Codeforces - 1194D - 1-2-K Game - dp的更多相关文章

  1. codeforces 161D Distance in Tree 树形dp

    题目链接: http://codeforces.com/contest/161/problem/D D. Distance in Tree time limit per test 3 secondsm ...

  2. Codeforces 682 D. Alyona and Strings (dp)

    题目链接:http://codeforces.com/contest/682/problem/D 给你两个字符串,求两个字符串中顺序k个的相同子串 长度之和.(注意是子串) dp[i][j][k][0 ...

  3. Codeforces 461B Appleman and Tree(木dp)

    题目链接:Codeforces 461B Appleman and Tree 题目大意:一棵树,以0节点为根节点,给定每一个节点的父亲节点,以及每一个点的颜色(0表示白色,1表示黑色),切断这棵树的k ...

  4. 很好的一个dp题目 Codeforces Round #326 (Div. 2) D dp

    http://codeforces.com/contest/588/problem/D 感觉吧,这道题让我做,我应该是不会做的... 题目大意:给出n,L,K.表示数组的长度为n,数组b的长度为L,定 ...

  5. Educational Codeforces Round 1 E. Chocolate Bar dp

    题目链接:http://codeforces.com/contest/598/problem/E E. Chocolate Bar time limit per test 2 seconds memo ...

  6. codeforces 148E Aragorn's Story 背包DP

    Aragorn's Story Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset/probl ...

  7. Codeforces 509F Progress Monitoring:区间dp【根据遍历顺序求树的方案数】

    题目链接:http://codeforces.com/problemset/problem/509/F 题意: 告诉你遍历一棵树的方法,以及遍历节点的顺序a[i],长度为n. 问你这棵树有多少种可能的 ...

  8. Codeforces 440 D. Berland Federalization 树形DP,记录DP

    题目链接:http://codeforces.com/contest/440/problem/D D. Berland Federalization   Recently, Berland faces ...

  9. Codeforces 730J:Bottles(背包dp)

    http://codeforces.com/problemset/problem/730/J 题意:有n个瓶子,每个瓶子有一个当前里面的水量,还有一个瓶子容量,问要把所有的当前水量放到尽量少的瓶子里至 ...

随机推荐

  1. restTemplate工具类

    import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.sprin ...

  2. 四轴飞行器飞行原理与双闭环PID控制

    四轴轴飞行器是微型飞行器的其中一种,相对于固定翼飞行器,它的方向控制灵活.抗干扰能力强.飞行稳定,能够携带一定的负载和有悬停功能,因此能够很好地进行空中拍摄.监视.侦查等功能,在军事和民用上具备广泛的 ...

  3. 7——C++类的使用

     定义了一个类之后,便可以如同用int.double等类型符声明简单变量一样,创建该类的对象,称为类的实例化.           类的定义实际上是定义了一种类型,类不接收或存储具体的值,只作为生成具 ...

  4. python 中的getattr(),setattr(),hasattr()的方法

    hasattr(object,name) 判断一个对象中是否有name属性或者name方法返回BOOL值,如果有这个属性的话,就返回TRUE,反之,返回FALSE 需要注意的是name要用括号括起来 ...

  5. LeetCode--049--字母异位词分组(java)

    给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "tan&quo ...

  6. 【Java】SpringBoot的bean懒加载@Lazy注解

    注解说明 @Lazy:一般情况下,Spring容器在启动时会创建所有的Bean对象,使用@Lazy注解可以将Bean对象的创建延迟到第一次使用Bean的时候. 引用 在类上加入@Lazy或者@Lazy ...

  7. ctrl+鼠标左键监听

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 5 October

    POJ2676 Sudoku 位运算 + 搜索.更好的优化方法:方案数最小的空格先填. 把某一位 置为 0:a &=~ (1<<n) 把某一位 置为 1:a |= (1<&l ...

  9. drawArc

    1) 画笔设置 Paint.Style.STROKE 中空模式 paint = new Paint(); //新建一个画笔对象 paint.setAntiAlias(true);//抗锯齿功能 pai ...

  10. web服务器、WSGI跟Flask(等框架)之间的关系

    之前对 Nginx,WSGI(或者 uWSGI,uwsgi),Flask(或者 Django),这几者的关系一存存在疑惑.通过查阅了些资料,总算把它们的关系理清了. 总括来说,客户端从发送一个 HTT ...