某考试T1 game
题目背景
无
题目描述
Alice 和 Bob 在一个圆环上玩游戏。圆环上有 n 个位置,按照顺时针顺序 依次标号为 1 到 n。Alice 和 Bob 分别有一个数字集合,集合中都是在 [1, n−1] 内的正整数。游戏开始时会有一个棋子摆在圆环上的某个位置,然后两人轮流 行动。轮到某个人的回合时,他可以从他的集合中选出某个数 x,然后把棋子 沿顺时针方向移动 x 个位置。如果某个人把棋子移动到了 1 号位置,那么他就 获胜了。两个人都会以最优策略行动。 你需要对不同先后手顺序以及棋子初始位置的每种情况,求出谁能获胜, 或者说游戏永远不会结束。
输入输出格式
输入格式:
第一行为一个正整数 n。 第二行的第一个正整数 k1 表示 Alice 的集合的大小,接下来的 k1 个正整 数表示 Alice 的集合中的数(保证这些数不会重复)。 第三行的第一个正整数 k2 表示 Bob 的集合的大小,接下来的 k2 个正整 数表示 Bob 的集合中的数(保证这些数不会重复)。
输出格式:
第一行输出 n − 1 个词,第 i 个词表示 Alice 先手且棋子初始在位置 i + 1 的答案。如果 Alice 必胜输出”Win”,必败输出”Lose”,游戏不会结束输 出”Loop”。 第二行输出 n−1 个词,第 i 个词表示 Bob 先手且棋子初始在位置 i+ 1 的 答案。如果 Bob 必胜输出”Win”,必败输出”Lose”,游戏不会结束输出”Loop”。
输入输出样例
- 5
- 3 3 1 2
- 2 2 3
- Loop Win Win Win
- Lose Win Win Loop
说明
对于 30% 的数据,保证 2 ≤ n ≤ 5。 对于 60% 的数据,保证 2 ≤ n ≤ 300。 对于 100% 的数据,保证 2 ≤ n ≤ 7000, 1 ≤ k1, k2 ≤ n − 1。
就是一个最简单的博弈问题,图都不用建一遍dfs就行了。。。
然而我考试的时候忘了标记已经计算过的节点然后才50。。。。。我好菜啊ww
- #include<iostream>
- #include<cstdio>
- #include<cstdlib>
- #include<cstring>
- #include<cmath>
- #include<algorithm>
- #include<vector>
- #include<queue>
- #define ll long long
- #define maxn 7005
- using namespace std;
- int n,s,t,a[maxn],b[maxn];
- int win[maxn*2];
- int cnt[maxn*2];
- bool vis[maxn*2];
- inline int add(int x,int y){
- x+=y;
- if(x>=n) return x-n;
- else return x;
- }
- inline void bfs(){
- queue<int> q;
- int x,to;
- q.push(0),q.push(n);
- win[0]=win[n]=-1;
- while(!q.empty()){
- x=q.front(),q.pop();
- vis[x]=1;
- if(x<n){
- for(int i=1;i<=t;i++){
- to=add(x,n-b[i])+n;
- if(vis[to]) continue;
- if(win[x]==-1) win[to]=1,q.push(to);
- else if(win[x]==1&&(++cnt[to])==t) win[to]=-1,q.push(to);
- }
- }
- else{
- for(int i=1;i<=s;i++){
- to=add(x,-a[i]);
- if(vis[to]) continue;
- if(win[x]==-1) win[to]=1,q.push(to);
- else if(win[x]==1&&(++cnt[to])==s) win[to]=-1,q.push(to);
- }
- }
- }
- }
- int main(){
- scanf("%d",&n);
- scanf("%d",&s);
- for(int i=1;i<=s;i++) scanf("%d",a+i);
- scanf("%d",&t);
- for(int i=1;i<=t;i++) scanf("%d",b+i);
- bfs();
- for(int i=1;i<n;i++){
- if(!win[i]) printf("Loop ");
- else if(win[i]==1) printf("Win ");
- else printf("Lose ");
- }
- puts("");
- for(int i=1;i<n;i++){
- if(!win[i+n]) printf("Loop ");
- else if(win[i+n]==1) printf("Win ");
- else printf("Lose ");
- }
- return 0;
- }
某考试T1 game的更多相关文章
- 考试T1总结(又CE?!)
考试T1CE... 最近不适合考试 T1 扶苏是个喜欢一边听古风歌一边写数学题的人,所以这道题其实是五三原题.歌曲中的主人公看着墙边的海棠花,想起当年他其实和自己沿着墙边种了一排海棠,但是如今都已枯萎 ...
- 某考试 T1 arg
题目描述 给出一个长度为 m 的序列 A, 请你求出有多少种 1...n 的排列, 满足 A 是它的一个 LIS. 输入格式 第一行两个整数 n, m. 接下来一行 m 个整数, 表示 A. 输出格式 ...
- 某考试 T1 lcm
把lcm写成 (a+n)*(b+n) / gcd(a+n,b+n). 因为gcd可以辗转相减,所以就成了gcd(abs(a-b),a+n),一个常量一个变量之间的gcd,我们可以直接把abs(a-b) ...
- 2019.2.25考试T1, 矩阵快速幂加速递推+单位根反演(容斥)
\(\color{#0066ff}{题解}\) 然后a,b,c通过矩阵加速即可 为什么1出现偶数次3没出现的贡献是上面画绿线的部分呢? 考虑暴力统计这部分贡献,答案为\(\begin{aligned} ...
- 2019.2.14 考试T1 FFT
\(\color{#0066ff}{ 题目描述 }\) 衡水二中的机房里经常有人莫名其妙地犇雷,leizi很生气,决定要找出那个犇雷的人 机房有n个人,每个人都认为机房里有两个人可能会犇雷,其中第i个 ...
- 某考试 T1 fair (18.5.1版)
转化一下模型:每天可以选1也可以选0,但是任意前i天(i<=n)1的个数都必须>=0的个数,求总方案数/2^n. 然后可以发现这是一个经典题,随便推一下公式发现等于 C(n,n/2)/2 ...
- 某考试 T1 str
一开始死磕sam,发现根本没法做...... 后来想了想,反正匹配子串的大部分不是sam就是 二分+hash啊,,,于是就想了想二分+hash,发现好像可以做啊! 就是假设我们要让 s1[1] 映射到 ...
- 某考试 T1 monopoly
可以很容易的发现,如果选了最高的房子,那么就不能再选了:否则在左边选一坨合法的,在右边选一坨合法的,拼起来还是合法的. 所以我们可以处理出,每个数的控制区间[L,R] (保证这个区间是其他数都小于它的 ...
- 某考试 T1 Hello my friend
Discription
随机推荐
- Android 自定义debug.keystore
场景分析: 有时候,我们要使用第三方的服务,需要提供自己的包名以及keystore的sha1值,比如微信支付,百度地图,都需要包名和keystore的sha1值作为唯一标识.这时候我们测试的时候,如果 ...
- ObjectOutputStream和ObjectInputStream的简单使用
使用ObjectOutputStream往文本写内容时,首先在文本里面标记开始,然后是内容,最后加上结束标示.如果想再次往文本里面添加内容的话,就要加在开始标示之后和结束标示之前,不然会读取不到写入的 ...
- 使用vue+webpack的多页面架构(转+自己的情况)
按以下步骤可正常配置多页面架构 记得安装 node-glob 安装命令:npm install node-glob --save-dev 文件附加 webpack.base.conf.js --参 ...
- 《HTTP协议详解》读书笔记---请求篇之消息报头
不管是请求消息还是响应消息都包含消息报头,那么消息报头包含哪些内容?他们都代表什么含义呢?以下将带着 这些问题去学习消息报头. http消息(不管是请求消息还是响应消息)都是由开始行,消息报头(可选) ...
- Wordpress 文章添加副标题
后台编辑区添加自定义副标题字段 /** * Add Subtitle in all post */ function article_subtitle( $post ) { if ( ! in_arr ...
- C#控制台程序读取项目中文件路径
//使用appdomain获取当前应用程序集的执行目录 string dir = AppDomain.CurrentDomain.BaseDirectory; //使用path获取当前应用程序集的执行 ...
- 【bzoj3916】[Baltic2014]friends 字符串hash
题目描述 有三个好朋友喜欢在一起玩游戏,A君写下一个字符串S,B君将其复制一遍得到T,C君在T的任意位置(包括首尾)插入一个字符得到U.现在你得到了U,请你找出S. 输入 第一行一个数N,表示U的长度 ...
- POJ 3155 Hard Life(最大密度子图+改进算法)
Hard Life Time Limit: 8000MS Memory Limit: 65536K Total Submissions: 9012 Accepted: 2614 Case Ti ...
- 永琳的竹林迷径(path)
永琳的竹林迷径(path) 题目描述 竹林可以看作是一个n 个点的树,每个边有一个边长wi,其中有k 个关键点,永琳需要破坏这些关键点才能走出竹林迷径. 然而永琳打算将这k 个点编号记录下来,然后随机 ...
- CCC2019游记
好吧其实是清华游记,$CCC2019$ 在中国只有北京和天津举办,要选去加拿大的人很少,估计是最近两国关系有点紧张的缘故吧 但实际上是某些已经被清华钦点的人去预览一下他们未来的栖息所 $13:30$ ...