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. UNIX网络编程总结一

    客户与服务器通信使用TCP在同一网络通信时,大致按下面的方式通信:client→TCP→IP→以太网驱动程序→以太网→以太网驱动程序→IP→TCP→server.若不在同一网络则需要路由器连接. 客户 ...

  2. Vue 学习之 vue-router2

    ---恢复内容开始--- 一.路由的安装: npm安装 npm install vue-router --save 执行命令完成vue-router的安装,并在package.json中添加了vue- ...

  3. php 调用远程url

    // ; Whether to allow the treatment of URLs (like http:// or ftp://) as files. // ; http://php.net/a ...

  4. Linux命令行工具之pidstat命令

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11484624.html pidstat命令就可以帮助我们监测到具体线程的上下文切换 通过pidstat ...

  5. springboot logback 配置 通配符不行就这样

    <?xml version="1.0" encoding="UTF-8"?><configuration> <property n ...

  6. pyhive连接hive(失败)

    一.安装pyhive pip install sasl(需要来下载至本地安装:https://download.lfd.uci.edu/pythonlibs/q4hpdf1k/sasl-0.2.1-c ...

  7. Nginx实现反向代理与负载均衡

    1.什么是反向代理 使用nginx实现反向代理,Nginx只做请求的转发,后台有多个http服务器提供服务,nginx的功能就是把请求转发给后面的服务器,决定把请求转发给谁. 2.在一个虚拟机上创建两 ...

  8. 元素隐藏visibility:hidden与元素消失display:none的区别

    visibility属性用来确定元素是显示还是隐藏的,这用visibility="visible|hidden"来表示(visible表示显示,hidden表示隐藏). 当visi ...

  9. 29 August

    P1352 Bosses' Masquerade 树形DP模板. #include <cstdio> #include <algorithm> using namespace ...

  10. Sublime Text3 代码编辑器使用笔记

    Sublime Text3 作为一款代码的文本编辑器,有许多插件,这一点是我认为 Sublime Text3 很强大的原因之一.插件的安装可以参考下面的文章. Sublime Text3 插件安装教程 ...