uva live 12846 A Daisy Puzzle Game
假设下一个状态有必败。那么此时状态一定是必胜,否则此时状态一定是必败
状压DP
#include<iostream>
#include<map>
#include<string>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
int dp[1<<20];
int n;
int dfs(int state)
{
int i,t;
if(state==0)//0必败
return dp[0]=0;
if(dp[state]!=-1)//此状态已知
return dp[state];
dp[state]=0;
for(i=0;i<n;i++)
{
if((state>>i)&1)//摘掉第i个花瓣
{
t=state^(1<<i);
if(dfs(t)==0)
{
dp[state]=1;//此状态必胜
break;
}
if(i<n-1&&((t>>(i+1))&1))//再摘掉第i+1个花瓣
{
t=t^(1<<(i+1));
if(dfs(t)==0)
{
dp[state]=1;//此状态必胜
break;
}
}
}
}
return dp[state];
}
int main()
{
bool vis[30];
int a[30];
int i,T,j,k,m,t,state,cnt;
memset(dp,-1,sizeof(dp));
cin>>T;
for(j=1;j<=T;j++)
{
cin>>n>>m;
memset(vis,0,sizeof(vis));
while(m--)
{
cin>>t;
vis[t]=1;
}
cnt=0;
for(i=1;i<=n;i++)
{
if(!vis[i])
a[cnt++]=1;
else
break;
}
if(i!=n)
{
for(k=n;k>=i;k--)
if(!vis[k])
a[cnt++]=1;
else
a[cnt++]=0;
}
state=0;
for(i=0;i<cnt;i++)
state+=a[i]*(1<<(cnt-i-1));//生成初始状态
n=cnt;
if(dfs(state))
printf("Case %d: yes\n",j);
else
printf("Case %d: no\n",j);
}
return 0;
}
12846 A Daisy Puzzle Game
Little Gretchen playing the Daisy game
Gretchen, a little peasant girl from the Swiss Alps, is an expert
at the Daisy game, a simple game that is very well-known
around the country. Two players pluck of the petals of a Daisy
fower, and each player is always at liberty to pluck a single
petal or any two contiguous ones, so that the game would
continue by singles or doubles until the victorious one takes
the last leaf and leaves the “stump”—called the “old maid”—
to the opponent.
The pretty mädchen has mastered the Daisy game to such
an extent that she always plays optimally. In other words, she
always plays by performing the best possible moves on each
turn, a feat which never fails to astonish tourists who dare to
challenge her to a game.
Analyzing the game, it is not very complicated to fgure out a winning strategy for the second player,
as long as the game starts with a complete fower (having all of its petals intact). However, what will
happen when Gretchen plays against an opponent that also plays optimally, and some of the fower’s
petals have been plucked of at random?
A fower is described by a number N which represents the original number of petals of the fower,
and a list of the petals that have been plucked of. All petals are numbered from 1 to N, and given the
circular nature of the fower, that means petals 1 and N are originally adjacent.
Given the description of a fower, and assuming it’s Gretchen’s turn, will she win the game? Remember
that both players always play optimally.
Input
Input starts with a positive integer T, that denotes the number of test cases.
Each test case begins with two integers in a single line, N and M, representing the number of petals
originally in the fower, and the number of petals that have been plucked of, respectively.
The next line contains M distinct integers, representing the petals that have been plucked of. These
numbers will always be in ascending order.
T<=  5000; 3<=  N<=  20; 1 <= M < N
Output
For each test case, print the case number, followed by the string ‘yes’ if Gretchen wins the game, or
‘no’ otherwise.
Sample Input
2
13 1
7
5 3
1 3 4
Sample Output
Case 1: yes
Case 2: no
uva live 12846 A Daisy Puzzle Game的更多相关文章
- UVA 12849 Mother’s Jam Puzzle( 高斯消元 )
题目: http://uva.onlinejudge.org/external/128/12849.pdf #include <bits/stdc++.h> using namespace ...
- uva 227 Puzzle
Puzzle A children's puzzle that was popular 30 years ago consisted of a 5x5 frame which contained ...
- UVA 227 Puzzle - 输入输出
题目: acm.hust.edu.cn/vjudge/roblem/viewProblem.action?id=19191 这道题本身难度不大,但输入输出时需要特别小心,一不留神就会出问题. 对于输入 ...
- UVA_Digit Puzzle UVA 12107
If you hide some digits in an integer equation, you create a digit puzzle. The figure below shows tw ...
- UVA 277 Puzzle
题意:输入5x5的字符串,输入操作,要求输出完成操作后的字符串. 注意:①输入的操作执行可能会越界,如果越界则按题目要求输出不能完成的语句. ②除了最后一次的输出外,其他输出均要在后面空一行. ③操作 ...
- UVA 227 Puzzle(基础字符串处理)
题目链接: https://cn.vjudge.net/problem/UVA-227 /* 问题 输入一个5*5的方格,其中有一些字母填充,还有一个空白位置,输入一连串 的指令,如果指令合法,能够得 ...
- uva 227 Puzzle (UVA - 227)
感慨 这个题实在是一个大水题(虽然说是世界决赛真题),但是它给出的输入输出数据,标示着老子世界决赛真题虽然题目很水但是数据就能卡死你...一直pe pe直到今天上午AC...无比感慨...就是因为最后 ...
- Puzzle UVA - 227 PE代码求大佬指点
A children's puzzle that was popular 30 years ago consisted of a 5×5 frame which contained 24 smal ...
- UVA - 12107 Digit Puzzle(数字谜)(IDA*)
题意:给出一个数字谜,要求修改尽量少的数,使修改后的数字谜只有唯一解.空格和数字可以随意替换,但不能增删,数字谜中所有涉及的数必须是没有前导零的正数.输入数字谜一定形如a*b=c,其中a.b.c分别最 ...
随机推荐
- OSI七层模型和TCP/IP五层模型详解
OSI是一个开放性的通信系统互连参考模型,他是一个定义得非常好的协议规范.OSI模型有7层结构,每层都可以有几个子层. OSI的7层从上到下分别是 7 应用层 6 表示层 5 会话层 4 传输层 3 ...
- 背包DP || Codeforces 544C Writing Code
程序员写bug的故事23333 题意:n个程序员,一共写m行程序,最多产生b个bug,问方案数 思路:f[i][j]表示写了i行,产生了j个bug的方案数,因为每个人都是可以独立的,所以i循环到n都做 ...
- 在虚拟机linux环境下编译windows版adb fastboot
原文出自:http://blog.chinaunix.net/uid-20546441-id-1746200.html 我根据虚拟机编译遇到的问题进行一些添加 [前提条件] Linux Android ...
- JavaEE-04 数据源配置
学习要点 JNDI 数据库连接池 完成新闻发布系统数据库连接池 JNDI 说明 JNDI(Java Naming and Directory Interface),中文翻译为Java命名与目录接口,是 ...
- JS常用字符串处理方法应用总结
这篇文章主要总结了JS常用字符串的处理方法,需要的朋友可以参考下 1.indexOf()方法,从前往后查找字符串位置,大小写敏感,从0开始计数.同理,lastIndexOf() 方法从后往前,两个 ...
- C++关键字(保留字)
C++ 关键字 点击下表以进入具体释义 __abstract 2 __alignof Operator __asm __assume __based __box 2 __cdecl __declspe ...
- Linux vim指令学习
每天查看一遍vim文档 Linux系统下命令:$ vimtutor 1.可视模式([v] 或者 [Ctrl + v])下的[U]把选中的文本变为大写 .[u]把选中的文本变为小写. 2.[数字] + ...
- redis搭建配置
1 .去官方下载 2.解压tar 3.进入解压目录 编译 4.将编译好的目录移动到制定位置.做软连接 .配置环境便利 5.创建数据保存目录.创建配置文件 [root@radis ~]# vim /da ...
- Linux test命令
test命令 长格式的例子: test "$A" == "$B" && echo "Strings are equal" t ...
- webpack之source map
先来一个webpack小例子,项目结构如下: // greeter.js module.exports = function() { var greet = document.createElemen ...