D. Tokitsukaze, CSL and Stone Game
Tokitsukaze, CSL and Stone Game
题意:
有n堆石头,每次只能选择一堆取其一个
如果取不了石头,呢么就输了
如果取完后出现两堆一样多,呢么就输了
解析:
有三种特殊情况要特判
1.一开始就出现两个0
2.出现大于1次,两个一样的,或者超过2次一样的
3.a[i]+1==a[i+1],a[i+1]==a[i+2]
其他的都可以化为:a[i]=min(a[i],a[i-1]+1);
sum+=a[i]-min(a[i],a[i-1]+1);
判断sum的奇偶,为奇sjfnb,为偶sjfnb
#include<bits/stdc++.h>
#define ll long long
#define MAXN 100005
using namespace std;
int a[MAXN];
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
sort(a+1,a+1+n);
int num=0;
for(int i=1;i<=n-1;i++)
{
if(a[i]==a[i+1])
{
num++;
if(num>=2||a[i]==0)//相等的>2获得2对的的大于2,直接输
{ //开始就两个0,直接输//
printf("cslnb\n");
return 0;
}
}
}
for(int i=1;i<=n-2;i++)
{
if(a[i]+1==a[i+1]&&a[i+1]==a[i+2])//前面一个顶住后面两个,怎么变都是输
{
printf("cslnb\n");
return 0;
}
}
ll sum=0;
for(int i=1;i<=n;i++)//直接求从0开始的变化次数,偶数的cslnb
sum+=a[i]-(i-1);
printf("%s\n",sum%2==0?"cslnb":"sjfnb");
return 0;
}
题意