Problem - D - Codeforces

时津风和CSL正在玩一个石头的小游戏。

一开始,有n个石子堆,其中第ii堆有aiai石子。两位玩家轮流走棋。时津风先走。每一回合,棋手选择一个非空的棋堆,并从该棋堆中准确地取出一块石头。如果在轮到他之前,所有的棋堆都是空的,或者在取出石头之后,两个棋堆(可能是空的)包含相同数量的石头,那么玩家就输了。假设双方都以最佳状态下棋,那么谁会赢得比赛?

考虑一个例子:n=3n=3,堆的大小为a1=2a1=2,a2=3a2=3,a3=0a3=0.不可能选择空堆,所以时风有两个选择:第一和第二堆。如果她选择第一堆,那么状态将是[1,3,0][1,3,0],这是个好棋。但如果她选择第二堆,那么状态将是[2,2,0][2,2,0],她马上就输了。所以她唯一的好棋是选择第一堆。

假设两位棋手都是走自己的好棋,而且从不犯错,那么谁会赢得比赛?

请注意,即使一开始就有两堆相同数量的棋子,时风仍然可以下出有效的第一步棋。只需要在她走完后,没有两堆相同数量的棋子。

输入

第一行包含一个整数nn(1≤n≤1051≤n≤105)--棋堆的数量。

第二行包含n个整数a1,a2,...,na1,a2,...,an(0≤a1,a2,...,an≤1090≤a1,a2,...,an≤109),这意味着第ii堆有aiai的石头。

输出

如果时风会赢,则打印 "sjfnb"(不带引号);如果CSL会赢,则打印 "cslnb"(不带引号)。请注意,输出字符是区分大小写的。

例子

输入

拷贝

1
0
输出

复制

cslnb
输入

复制

2
1 0
输出

复制

cslnb
输入

复制

2
2 2
输出

复制

sjfnb
输入

复制

3
2 3 1
输出

复制

sjfnb
注意

在第一个例子中,时风不能拿任何棋子,所以CSL会赢。

在第二个例子中,时风只能从第一堆棋中取走一颗棋子,然后,尽管他们没有棋子,但这两堆棋的数量是一样的,这意味着CSL会赢。

在第三个例子中,时风将会获胜。这里有一个最佳方法:

首先,时风可以选择第一堆棋,并从这堆棋中取出一颗棋子。
然后,CSL只能选择第一堆,因为如果他选择第二堆,他将立即输掉。
最后,时风可以选择第二堆,然后CSL将别无选择,只能输。
在第四个例子中,他们在任何时候都只有一个好的选择,所以时风可以让游戏持续尽可能长的时间,最终获胜。
题解:
我们考虑如何进入到必败态

一.开始就是必败态

1.如果出现两堆为0,sjf操作不了,直接输

2.如果出现两组两堆相同的,sjf无论怎么操作肯定会有两个或以上相同,(2 2 2)这种也是(2 2 4 4)

3.如果出现i - 1,i , i这种形式,sjf无论怎么操作也会输

二.开始不是必败态,多远走到必败态

0,1,2,3......n - 1类似这样,如果一个人拿完,类似这种形式,那这个人必赢,因为下一个人无论如何怎么操作,都会出现两个相同的

排序一下,记录s += (ai - (i - 1))的值,如果%2 == 0,后手必胜,

#include <cstdio>
#include <cstring>
#include <algorithm>
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<cmath>
#include<queue>
using namespace std;
typedef long long ll;
#define int long long
typedef pair<int,int> PII;
const int N = 1e6 + 10;
int a[100050];
void solve()
{int n;cin >> n;for(int i = 1;i <= n;i++){cin >> a[i];}sort(a + 1,a + 1 + n);int f = 0;for(int i = 2;i <= n;i++){if(a[i] == a[i - 1]){f ++;}  if(a[i] == a[i - 1] &&a[i - 1]== 0){f = 2;}if(a[i] == a[i - 1] &&i > 2&&a[i - 2] + 1 == a[i]){f = 2;}}int s = 0;for(int i = 1;i <= n;i++){s += (a[i] - (i - 1));}if(s%2 == 0||f >= 2){cout <<"cslnb";}else{cout <<"sjfnb";}
}signed main()
{
//  ios::sync_with_stdio(0);
//  cin.tie(0);cout.tie(0);int t = 1;
//  cin >> t;while(t--){solve(); }
}

D. Tokitsukaze, CSL and Stone Game(博弈)相关推荐

  1. 【CF 1191】Tokitsukaze, CSL and Stone Game//Tokitsukaze and Duel//Tokitsukaze and Strange Rectangle

    很难想 but很好实现 博弈论专练 传送门 惯例这里只完成D,E,F 话不多说上代码 文章目录 D:Tokitsukaze, CSL and Stone Game 题目大意 题解 代码实现 E:Tok ...

  2. 【博弈】Codeforces Round #573 (Div. 1) Tokitsukaze, CSL and Stone Game

    题意: 给n堆石子,每一堆有a[i] 个 石头,现在二人玩游戏,每一人每一次选择一个非空的石头堆,从中拿出一个石头.如果当一个人操作之后,这n堆石头中有两堆中的石头数量是相同的,那么这个人就输掉.假设 ...

  3. poj 1740 A New Stone Game 博弈

    题目来源: http://poj.org/problem?id=1740 分析: 均势为:  偶数堆,且 x,x, y,y,z,z... 即先人无论怎么取,后人跟先人一个走法,那么后人一定取最后一堆. ...

  4. UVA - 1378 A Funny Stone Game(博弈+sg函数)

    题目链接:点击查看 题目大意:给出n堆石子,两人轮流按照规则操作,不能操作的一方即为输 规则:每次将第i堆减少一个石子,将第j堆和第k堆增加一个石子,i,j,k满足(i<j<=k) 若先手 ...

  5. 最近做到的一些有意思的数学题目(博弈,双人玩游戏)

    最近做一些数学题目,感觉挺有意思的整理了一下. 1.北京理工大学2018级3月月赛A题:Ervin and Joker https://vjudge.net/problem/Gym-241030A#a ...

  6. 东北大学程序设计夏令营博弈论与构造

    博弈与构造专题 本次训练包含题目 Problem A Matches Game Problem B Georgia and Bob Problem C Deleting Divisors Proble ...

  7. Codeforces Round #573 (Div. 2)(ABCD)

    Tokitsukaze and Enhancement CodeForces - 1191A Tokitsukaze is one of the characters in the game &quo ...

  8. 周总结2022.1.17-2022.1.23

    1.17 Luogu P3384 [模板]轻重链剖分/树链剖分 学习了树链剖分(Lint-cut Tree)! 虽然之前也有看过,但是今天是第一次自己动手写.学完之后,感觉是一个非常巧妙的东西.树链剖 ...

  9. 【UVA1378】A Funny Stone Game (博弈-求SG值-输出方案)

    [题目] Description The funny stone game is coming. There are n piles of stones, numbered with 0, 1, 2, ...

最新文章

  1. 可以查python题的_python练习题 -股票查询
  2. NGUI UIRoot原理分析
  3. DCMTK:DSRDocument类的测试程序
  4. PreparedStatement是如何防止SQL注入的?
  5. php原生的异步请求,原生JavaScript实现Ajax异步请求
  6. 验证码功能-简单实现
  7. 7-33 统计素数并求和
  8. 三菱FX3UFX2NFX1N PLC 模拟器模拟通信功能,模拟PLC实体,FX3U仿真器,仿真PLC服务器
  9. USACO 19 FEB Mowing Mischief P 题解
  10. 2021昆明icpc B 状压+期望dp,一点几何模拟
  11. 8分钟腹肌锻炼日志(第20天)过冬ing
  12. WIFI的传输距离介绍
  13. Unity Unlit ShaderGraph实现与PBR的自发光贴图类似的叠加效果
  14. 2021年三季度中国医疗服务行业A股上市企业营收排行榜:国际医学于1月17日起戴帽,简称变更为“ST国医”(附热榜TOP37详单)
  15. 重写equals为什么要重写hashcode
  16. java 三点_[Java教程]三点运算符使用方法
  17. 当LCC画龙时,新老车企分别在想什么?
  18. 自媒体视频剪辑中的那些素材到哪里找?
  19. 含有受控源的电路分析
  20. Docker Swarm-Docker

热门文章

  1. c语言开发简历如何写,分享一份C语言写的简历
  2. 黄芩加半夏汤治疗急性腹痛案
  3. APP测试面试题快问快答(五)
  4. 英语中做表语的词性有哪些
  5. 塔木德分财产 思路+图片易懂 2022
  6. 番茄学习法——亲测超级好用
  7. V模型和W模型的区别是什么?
  8. FISCO BCOS
  9. AUTOCAD——绘制并编辑多条平行线、CAD如何固定坐标系?
  10. iOS 百度定位实现