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分别最 ...
随机推荐
- mysql数据库比较,各数据库不同之处
和mysql数据库比较,各数据库不同之处: Oracle数据库:字段类型不同 postgresql数据库:show tables不同; SQL语句需要前面加上 模式名 Mongodb数据库:文档存储, ...
- Tomcat启动报错 ERROR org.apache.struts2.dispatcher.Dispatcher - Dispatcher initialization failed
背景: 在进行Spring Struts2 Hibernate 即SSH整合的过程中遇到了这个错误! 原因分析: Bean已经被加载了,不能重复加载 原来是Jar包重复了! 情形一: Tomcat ...
- dinic网络流
C - A Plug for UNIX POJ - 1087 You are in charge of setting up the press room for the inaugural meet ...
- python中unicode, hex, bin之间的转换
python中unicode, hex, bin之间的转换 背景 在smb中有个feature change notify, 需要改动文件权限dacl,然后确认是否有收到notify.一直得不到这个d ...
- LeetCode(171) Excel Sheet Column Number
题目 Related to question Excel Sheet Column Title Given a column title as appear in an Excel sheet, re ...
- 跟初学者学习IbatisNet第二篇
在上一篇里面我们知道了什么是IbatisNet,并且知道了如何用IbatisNet进行简单的增删改查的操作,在这一篇文章里面我们主要介绍一下IbatisNet操作存储过程. 我们一般把存储过程分为两种 ...
- Python+selenium登录测试
我们以登录新浪微博为案例来讲解,首先进入登录页面,输入用户名和密码,点击登录按钮,并且获得用户信息以验证是否登录成功. Web地址:https://login.sina.com.cn/signup/s ...
- 如何安装python包
安装python包有两种方法: 使用Python包管理器pip工具 在Linux系统中,首先 yum install python-pip 然后就可以欢快的pip install *** 啦 源代码安 ...
- [POJ2443]Set Operation(bitset)
传送门 题意:给出n个集合(n<=1000),每个集合中最多有10000个数,每个数的范围为1~10000,给出q次询问(q<=200000),每次给出两个数u,v判断是否有一个集合中同时 ...
- [luoguP3178] [HAOI2015]树上操作(dfs序 + 线段树 || 树链剖分)
传送门 树链剖分固然可以搞. 但还有另一种做法,可以看出,增加一个节点的权值会对以它为根的整棵子树都有影响,相当于给整棵子树增加一个值. 而给以某一节点 x 为根的子树增加一个权值也会影响当前子树,节 ...