博弈论。
可能大体上比较好想,中间有可能会漏掉一些细节。
可以先判断先手走一步必输的情况(
表示
出现的次数):
&&
&&
除此之外,可以判断可行动步数的奇偶性。
我们考虑
堆石子,第
堆有
个石子,此时任意一人拿石子都会输。
因此可行动步数就是石子总数
#include<bits/stdc++.h>
using namespace std;
int n,a[100005];
int main()
{
scanf("%d",&n);
long long sum=0;
int k=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
if(a[i]==0)k++;
sum+=a[i]-(i-1);
}
sort(a+1,a+n+1);
int s=0;bool flag=false;
for(int i=2;i<=n;i++)
if(a[i]==a[i-1])
{
s++;
if(a[i-1]==a[i-2]+1&&i-2>0)flag=true;
}
if(sum%2==0||s>=2||k>=2||flag)puts("cslnb");else
puts("sjfnb");
return 0;
}