欢迎访问https://blog.csdn.net/lxt_Lucia~~

宇宙第一小仙女\(^o^)/~萌量爆表求带飞=≡Σ((( つ^o^)つ~ dalao们点个关注呗~

--------------------------------我只是一条可爱哒分界线-------------------------------

一、问题:

Description

小花梨有?堆石子,第?堆石子数量为??,?堆石子顺时针编号为1 − ?(如图)。

游戏将进行?轮,每轮游戏单独进行,互不干扰,每轮初始时第?堆石子数目为??。

第?轮从编号为?的那堆石子为起点,顺时针来取石子。两人轮流取石子,不可不取,最少取 一个石子,最多把当前这一堆取完,

只有取完一堆后才走到下一堆石子。走完一圈后石子都被取完,不能取石子的人就失败。

假设两人以最优策略进行取石子操作,请分别输出 ? 轮游戏是先手胜还是后手胜。

Input

第一行为正整数?,表示石子的堆数 (1 ≤ ? ≤ 100000)

第二行输入 ? 个正整数表示每一堆的石子数目?? (1 ≤ ?? ≤ 1e9 )

Output

输出 ? 行,第 ? 行表示第?轮游戏的结果。

如果先手胜则输出"?????",后手胜输出"??????"。

Sample Input

3

2 1 3

Sample Output

First

Second

First

Sample Input

2

2 2

Sample Output

First

First

二、题意:

中文题,不解释。注意是按顺序。

三、思路:

刚开始想用的尼姆博弈,后来发现是按顺序拿,不是任选一组。

多试几组样例会发现这样几个规律:

1)如果每轮第一堆不是1,那么先手必胜。假设第一堆是a [ i ] 个,那么先手可以通过拿a [ i ] - 1 个来获得主动权。

2)如果序列全为1,则取决于堆数,奇数则先手必胜,偶数则先手必败。这种情况需要单独考虑,不然就会先手后手相继输出。

3)此外就需要计算每轮从第一堆开始连续1的个数,偶数则先手必胜,奇数则先手必败。

其中,第(3)点找连续1的时候,如果是正常每次循环找的话会超时,所以就需要提前计算出来。

为了防止下标出错,我把原序列连着存了两遍,这样只需要找 [ i , i+n-1 ] 区间就可以了。

如果直接用sum数组从前往后遍历的话,记录的只能是开始到当前1的个数,所以倒着跑一遍,得到的才是正确答案。

四、代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define mem(a,b) memset(a,b,sizeof(a))
#define fori(a,b) for(int i=a;i<=b;i++)
#define forj(a,b) for(int j=a;j<=b;j++)using namespace std;
typedef long long ll;int main()
{int n, a[200020], sum[200020];bool flag = 0;mem(sum, 0);scanf("%d", &n);fori(1, n){scanf("%d", &a[i]);if(a[i] != 1)flag = 1;a[n+i] = a[i];}for(int i=n*2; i>=1; i--){if(a[i] == 1)sum[i] = sum[i+1]+1;elsesum[i] = 0;}fori(1, n){if(a[i] != 1){printf("First\n");continue;}else if(!flag){if(n % 2 == 1)printf("First\n");elseprintf("Second\n");}else{if(sum[i] % 2 == 0)printf("First\n");elseprintf("Second\n");}}return 0;
}

--------------------------------我也是有底线的---------------------------------

宇宙第一小仙女\(^o^)/~萌量爆表求带飞=≡Σ((( つ^o^)つ~ dalao们点个关注呗~

小花梨的取石子游戏 ( 博弈 )相关推荐

  1. “美登杯”上海市高校大学生程序设计邀请赛 **D. 小花梨的取石子游戏**

    "美登杯"上海市高校大学生程序设计邀请赛 (华东理工大学) D. 小花梨的取石子游戏 Description 小花梨有?堆石子,第?堆石子数量为??,?堆石子顺时针编号为1 − ? ...

  2. “美登杯”上海市高校大学生程序设计邀请赛(华东理工大学) 小花梨的取石子游戏(博弈)

    Description 小花梨有?堆石子,第?堆石子数量为??,?堆石子顺时针编号为1 − ?(如图) . 游戏将进行?轮,每轮游戏单独进行,互不干扰,每轮初始时第?堆石子数目为??. 第?轮从编号为 ...

  3. poj 1067 取石子游戏(博弈+威佐夫博奕(Wythoff Game))

    取石子游戏 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 29959   Accepted: 9818 Descriptio ...

  4. BZOJ 1413: [ZJOI2009]取石子游戏 博弈+Dp

    title BZOJ 1413 Description 在研究过Nim游戏及各种变种之后,Orez又发现了一种全新的取石子游戏,这个游戏是这样的: 有n堆石子,将这n堆石子摆成一排.游戏由两个人进行, ...

  5. 威佐夫博弈:百练OJ:1067:取石子游戏

    威佐夫博弈(Wythoff's game):有两堆各若干个物品,两个人轮流从任一堆取至少一个或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜. 百练OJ:1067:取石子游戏 ...

  6. POJ-1067取石子游戏,威佐夫博弈范例题/NYOJ-161,主要在于这个黄金公式~~

    取石子游戏 Time Limit: 1000MS   Memory Limit: 10000K              Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取 ...

  7. 吴昊品游戏核心算法(新年特别篇)——另类取石子游戏(斐波那契博弈)

    吴昊继续,我再也不想搬一堆石头放在这里了,取而代之的是<编程之美>中的关于游戏章节的一个插图,这本书中也有对<取石子游戏>的较为完备的讨论. 这次的游戏是神马? 1堆石子有n个 ...

  8. HDU2516 取石子游戏【博弈】

    取石子游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  9. POJ1067 HDU1527 取石子游戏【博弈】

    取石子游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

最新文章

  1. EFMVC - ASP.NET MVC 3 and Entity Framework 4.1 Code First 项目介绍
  2. java implements interface_Java 接口 interface implements
  3. 如何解决每次打开office 都会出现正在配置的问题
  4. Java黑皮书课后题第5章:5.2(重复加法)程序清单5-4产生了5个随机减法问题。改写该程序,使它产生10个随机加法问题,加数时两个1到15之间的整数。显示正确答案的个数和完成测试的时间
  5. Cocos2d 3.0继承自Sprite的类在addChild后出现故障
  6. java管道流文件的复制_JavaIO 总结笔记三 基本字节字符输入输出流和文件复制...
  7. (十)、java内部类与内部类的闭包和回调
  8. python post cookies_python 之post、get与cookie实战
  9. 软件测试行业前景,人才稀缺
  10. 64qam星座图matlab,基于MATLAB的QAM 眼图和星座图
  11. 【Linux 操作系统】vim编辑器配置及常用命令
  12. 美爆!《自然》公布2018年19张最震撼的科学图片
  13. TV新媒体电商发展遇瓶颈
  14. 鲁大师便捷查看硬盘参数
  15. 3台服务器+StarVCenter,搭建“超融合云平台”-完美体验-跑100台虚拟机
  16. 什么是高铁运营监测(转载)
  17. Flutter | bloc 之 state 使用优化
  18. bootstrap table合并单元格mergeCell
  19. CSS 实现DIV水平垂直居中(一)
  20. 华三交换机升级的ipe文件_H3C设备升级

热门文章

  1. 计算机系高考激励的句子,最新暖心激励高考生的励志句子40句
  2. 【计算方法】实验二:python实现高斯消去、列主元高斯消去,LU分解分别求解线性方程组
  3. 计算机专业助我成长作文600,电脑伴我成长作文
  4. Java数据类型及拓展面试题
  5. =,==和===的区别
  6. 摄影师拍蜗牛乘树叶花下避雨 似撑小伞泛舟
  7. 动画程序时长缩放是什么意思_1分钟做出高逼格动画!PPT中自带的小功能帮你一键搞定!...
  8. 立创eda学习笔记二十六:手把手教你使用立创eda的官方教程
  9. 斯坦福大学开发PETE装置吸收60%的太阳能
  10. 文本(文章内容)编辑器(CMS管理)