神秘代码:lfggtxdy
H:http://codeforces.com/problemset/problem/1190/B
题意:两人取石子,面前有n堆石子,给你每一堆的数量图片说明 (可能为零)问你谁能获胜。
败北条件是:第一,在某一次行动时没有石子可取勒。第二,在某一次取石子后,剩下的石子堆中有任意两堆的数量恰好相等。
思路:很容易发现一般情况下最后想要胜利,石子堆的样子必然是0,1,2,3,4……。
接下来考虑一下特殊情况。第一,开局的时候给了你两个空堆,这时候先手必败。第二,开局时候有两个堆数量相等,而且还有一堆数量恰好是它们数量减一,这时候也是先手必败的。至此代码也就写出来了。

//author CN.TTDragon
#include<bits/stdc++.h>
typedef long long ll;
const ll mod=1e9+7;
const ll maxn=100000+7;
const double pi=acos(-1);
using namespace std;
int a[maxn];
int main()
{
    ios::sync_with_stdio(false);
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    sort(a,a+n);
    //特殊条件1
    if(n>=2&&a[0]==0&&a[1]==0)
    {
        cout<<"cslnb"<<endl; 
        return 0;
    }
    //2
    for(int i=0;i<n-2;i++)
    {
        if(a[i+2]==a[i+1]&&a[i+1]==a[i]+1)
        {
            cout<<"cslnb"<<endl; 
            return 0;
        }
    }
    //有很多二
    int er=0;
    for(int i=0;i<n-1;i++)
    {
        if(a[i]==a[i+1])
        {
            er++;
            if(er>=2)
            {
                cout<<"cslnb"<<endl; 
                return 0;
            }
        }
    }

    //一般情况
    ll sum=0;
    for(int i=0;i<n;i++)
    {
        sum+=a[i];
    }
    if((sum-n*(n-1)/2)%2)
    {
        cout<<"sjfnb"<<endl;
    }
    else
    {
        cout<<"cslnb"<<endl;
    }
    return 0; 
}