博弈論。
可能大體上比較好想,中間有可能會漏掉一些細節。
可以先判斷先手走一步必輸的情況(表示出現的次數):
&&
&&
除此之外,可以判斷可行動步數的奇偶性。
我們考慮堆石子,第堆有個石子,此時任意一人拿石子都會輸。
因此可行動步數就是石子總數
#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;
}