博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ2425 A Chess Game[博弈论 SG函数]
阅读量:5977 次
发布时间:2019-06-20

本文共 2932 字,大约阅读时间需要 9 分钟。

A Chess Game
Time Limit: 3000MS   Memory Limit: 65536K
Total Submissions: 3917   Accepted: 1596

Description

Let's design a new chess game. There are N positions to hold M chesses in this game. Multiple chesses can be located in the same position. The positions are constituted as a topological graph, i.e. there are directed edges connecting some positions, and no cycle exists. Two players you and I move chesses alternately. In each turn the player should move only one chess from the current position to one of its out-positions along an edge. The game does not end, until one of the players cannot move chess any more. If you cannot move any chess in your turn, you lose. Otherwise, if the misfortune falls on me... I will disturb the chesses and play it again. 
Do you want to challenge me? Just write your program to show your qualification!

Input

Input contains multiple test cases. Each test case starts with a number N (1 <= N <= 1000) in one line. Then the following N lines describe the out-positions of each position. Each line starts with an integer Xi that is the number of out-positions for the position i. Then Xi integers following specify the out-positions. Positions are indexed from 0 to N-1. Then multiple queries follow. Each query occupies only one line. The line starts with a number M (1 <= M <= 10), and then come M integers, which are the initial positions of chesses. A line with number 0 ends the test case.

Output

There is one line for each query, which contains a string "WIN" or "LOSE". "WIN" means that the player taking the first turn can win the game according to a clever strategy; otherwise "LOSE" should be printed.

Sample Input

42 1 201 301 02 0 2041 11 2002 0 12 1 13 0 1 30

Sample Output

WINWINWINLOSEWIN

Hint

Huge input,scanf is recommended.

Source

,CHEN Shixi(xreborner)

裸SG函数搜索
注意used不能共用一个
 
#include
#include
#include
#include
#include
using namespace std;const int N=1e3+5,INF=1e9;int read(){ char c=getchar();int x=0,f=1; while(c<'0'||c>'9'){
if(c=='-')f=-1; c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0'; c=getchar();} return x*f;}int n,s,v;struct edge{ int v,w,ne;}e[N*N];int h[N],cnt=0;void ins(int u,int v){ cnt++; e[cnt].v=v;e[cnt].ne=h[u];h[u]=cnt;}int sg[N];int dfs(int u){ if(sg[u]!=-1) return sg[u]; bool used[N]; memset(used,0,sizeof(used)); for(int i=h[u];i;i=e[i].ne) used[dfs(e[i].v)]=1; for(int i=0;;i++) if(!used[i]) {sg[u]=i;break;} return sg[u];}int main(){ while(scanf("%d",&n)!=EOF){ memset(sg,-1,sizeof(sg)); memset(h,0,sizeof(h)); cnt=0; for(int i=1;i<=n;i++){ s=read(); while(s--) ins(i,read()+1); } while((s=read())){ int ans=0; for(int i=1;i<=s;i++) ans^=dfs(read()+1); if(ans) puts("WIN"); else puts("LOSE"); } }}

 

 
 

转载地址:http://ndsox.baihongyu.com/

你可能感兴趣的文章
Shell编程基础
查看>>
Shell之Sed常用用法
查看>>
Centos下基于Hadoop安装Spark(分布式)
查看>>
mysql开启binlog
查看>>
设置Eclipse编码方式
查看>>
分布式系统唯一ID生成方案汇总【转】
查看>>
并查集hdu1232
查看>>
Mysql 监视工具
查看>>
Linux Namespace系列(09):利用Namespace创建一个简单可用的容器
查看>>
博客搬家了
查看>>
Python中使用ElementTree解析xml
查看>>
linux的日志服务器关于屏蔽一些关键字的方法
查看>>
mysql多实例实例化数据库
查看>>
javascript 操作DOM元素样式
查看>>
HBase 笔记3
查看>>
【Linux】Linux 在线安装yum
查看>>
Atom 编辑器系列视频课程
查看>>
[原][osgearth]osgearthviewer读取earth文件,代码解析(earth文件读取的一帧)
查看>>
mybatis update返回值的意义
查看>>
expdp 详解及实例
查看>>