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. SICP 习题解 第二章

    计算机程序的构造和解释习题解答 Structure and Interpretation os Computer Programs Exercises Answer 第二章 构造数据抽象 练习2.17 ...

  2. openGL常用对象的创建及使用

    一.GPU英文全称Graphic Processing Unit,中文翻译为“图形处理器”.GPU(显卡核心芯片)是显示卡的“大脑”,它决定了该显卡的档次和大部分性能 二.使用背景 随着OpenGL状 ...

  3. Docker 基础学习(一)

    Docker官网:https://docker.com/ 中文翻译非常好的学习地址:http://dockerpool.com/static/books/docker_practice/index.h ...

  4. 微服务+DDD代码结构例子

    这是一个基本的微服务+DDD演示例子: 基于 Spring Boot 1.5.6 , Spring Cloud Edgware.SR4 Version 微服务 + DDD,个人觉得应该是首先是从微服务 ...

  5. k8s+jenkins

    1 server 的port , targetport, nodeport的区别 targetport为容器的暴露端口,为最后端的端口 port可以理解为pod的端口,pod是容器的外层,该端口可以在 ...

  6. Zabbix分布式监控系统实践 自定义配置

    https://www.zabbix.com/wiki/templates/start 环境介绍OS: Ubuntu 10.10 Server 64-bitServers:zabbix-server: ...

  7. 第四周作业—N42-虚怀若谷

    一.统计出/etc/passwd文件中其默认shell为非/sbin/nologin的用户个数,并将用户都显示出来 [root@centos7 ~]# grep -v "/sbin/nolo ...

  8. xss盲打

    什么是xss盲打? 简单来说,盲打就是在一切可能的地方尽可能多的提交xss语句,然后看哪一条会被执行,就能获取管理员的cooike.趁着没过期赶紧用了,这样就能直接管理员进后台.然后再上传一句话,大马 ...

  9. 【Nacos】Nacos安装

    1.Nacos简介 Nacos是阿里巴巴集团开源的一个易于使用的平台,专为动态服务发现,配置和服务管理而设计.它可以帮助您轻松构建云本机应用程序和微服务平台. Nacos基本上支持现在所有类型的服务, ...

  10. Python 装饰器之 functools.wraps

    在看 Bottle 代码中看见 functools.wraps 这种用法. def make_default_app_wrapper(name): """ Return ...