cf573 1B Tokitsukaze, CSL and Stone Game

题意:时津风和蔡队玩取石头游戏,有n堆石头,双方轮流取,每次只能取一个石子。没得取或者取完出现两堆数量一样的(0也算)的人输。

这题不用到博弈的多少知识,随便想想就好了。首先特判已经相同的堆,大于等于三个相同的必输。两个堆相同则必须取这个,先模拟一步操作。然后就是所有堆不同了,显然经过很多轮后最终会达到0~n-1各出现一个的必败局面,所以排序算总移动次数的奇偶就行了。

  1.     #include <iostream>
  2.     #include <cstdio>
  3.     #include <cmath>
  4.     #include <cstring>
  5.     #include <algorithm>
  6.     using namespace std;
  7.  
  8.     typedef long long ll;
  9.     #define inc(i,n) for (ll i=0;i<n;i++)
  10.     int p[1000010];
  11.  
  12.     int main(){
  13.     	int n,sm=0; cin>>n;
  14.     	for (int i=1;i<=n;i++) scanf("%d",p+i);
  15.     	sort(p+1,p+n+1); p[0]=-1;
  16.     	int d=0;
  17.     	for (int i=1;i<n;i++){
  18.     		if (p[i+1]==p[i]){
  19.     			sm++;
  20.     			if (sm>1 || p[i-1]==p[i]-1) return puts("cslnb"),0;
  21.     			p[i]--; d=1;
  22.     		}
  23.     	}
  24.     	ll sum=0;
  25.     	for (int i=1;i<=n;i++) sum+=p[i]-i+1;
  26.     	if ((sum & 1) ^ d) puts("sjfnb");
  27.     	else puts("cslnb");
  28.     	return 0;
  29.     }

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注