Codeforces - 1194D - 1-2-K Game - dp
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的更多相关文章
- codeforces 161D Distance in Tree 树形dp
题目链接: http://codeforces.com/contest/161/problem/D D. Distance in Tree time limit per test 3 secondsm ...
- Codeforces 682 D. Alyona and Strings (dp)
题目链接:http://codeforces.com/contest/682/problem/D 给你两个字符串,求两个字符串中顺序k个的相同子串 长度之和.(注意是子串) dp[i][j][k][0 ...
- Codeforces 461B Appleman and Tree(木dp)
题目链接:Codeforces 461B Appleman and Tree 题目大意:一棵树,以0节点为根节点,给定每一个节点的父亲节点,以及每一个点的颜色(0表示白色,1表示黑色),切断这棵树的k ...
- 很好的一个dp题目 Codeforces Round #326 (Div. 2) D dp
http://codeforces.com/contest/588/problem/D 感觉吧,这道题让我做,我应该是不会做的... 题目大意:给出n,L,K.表示数组的长度为n,数组b的长度为L,定 ...
- 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 ...
- codeforces 148E Aragorn's Story 背包DP
Aragorn's Story Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset/probl ...
- Codeforces 509F Progress Monitoring:区间dp【根据遍历顺序求树的方案数】
题目链接:http://codeforces.com/problemset/problem/509/F 题意: 告诉你遍历一棵树的方法,以及遍历节点的顺序a[i],长度为n. 问你这棵树有多少种可能的 ...
- Codeforces 440 D. Berland Federalization 树形DP,记录DP
题目链接:http://codeforces.com/contest/440/problem/D D. Berland Federalization Recently, Berland faces ...
- Codeforces 730J:Bottles(背包dp)
http://codeforces.com/problemset/problem/730/J 题意:有n个瓶子,每个瓶子有一个当前里面的水量,还有一个瓶子容量,问要把所有的当前水量放到尽量少的瓶子里至 ...
随机推荐
- winsows CMD及Linux命令大全 欢迎补充
CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本.文件系统版本) CMD命令锦集 1. gpedit.msc-----组策略 2. sndrec32--- ...
- tomcat的跳转与日志
1.跳转的关键性配置; 2. 日志的配置 1.跳转的关键性配置 当用户访问http://www.a.com/test时,会跳转打开/var/www/html目录下的页面 关键性配置如下: [root@ ...
- HDU 4678 Mine(博弈)
Mine Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Submi ...
- 线程工具类 - CountDownLatch(倒计时器)
CountDownLatch官方文档 一.原理 CountDownLatch是一个非常实用的多线程控制工具类.Count Down在英文中意为倒计时,Latch意为门闩,可以简单的将CountDown ...
- java.util.Date 与 java.sql.Date 相关知识点解析
问:java.sql.Date 和 java.util.Date 有什么区别? 答:这两个类的区别是 java.sql.Date是针对 SQL 语句使用的,它只包含日期而没有时间部分,一般在读写数 ...
- 多线程、同步实现方法及Error和Exception的区别与联系
多线程.同步实现方法? 实现线程有两种方法: 继承Thread类 实现Runnable接口 实现同步也有两种方法 一种是用同步方法:同步方法就是在方法返回类型后面加上synchronized, 比如: ...
- [POJ 1911] 棋盘
问题描述 将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的部分继续如此分割,这样割了(n-1)次后,连同最后剩下的矩形棋盘共有n块矩形棋盘.(每次切割都只能沿着 ...
- Proto3语法翻译
本文主要对proto3语法翻译.参考网址:https://developers.google.com/protocol-buffers/docs/proto3 defining a message t ...
- NIO之Buffer操作示例
1. buffer常规操作 略 2. 只读buffer /** * 只读buffer */ public class BufferTest01 { public static void main(St ...
- VR和AR
VR 虚拟现实,比如你天气很炎热,戴上VR眼镜,出现在你眼前的是哈尔滨的冰雪世界 AR 增强现实,比如你站在一片碧绿的草地上,给你身边来一匹快马 想想一个单身狗去电影院,给你身边来一个美女作陪,这是多 ...