D. Tokitsukaze, CSL and Stone Game
题意:有n堆石头,每人每次只能去一颗石子,若轮到当前人没任何一堆石子可以取或当前人取到后剩下有俩堆石子个数相同则当前人输;
给定石子序列。
分析:1、若有类似“2 3 3 ”则后手胜,因为有这个序列就必须在这个序列中去石子(因为如果在这个序列以外取子,则会导致输的后者情况),但在这个序列中取不到可解情况,所以该状态为必败态;
2、若序列中有俩对相同的石子,则后手胜;
3、除1、2情况外就把利用sum+起来,每个加就+a[i]-(i+1) 为了把他提到前面他不能再动的最优状态(因为俩者都采取最优策略!!!)
#include<bits/stdc++.h> using namespace std; typedef long long ll; ll a[100005]; int main(){ int n; ll sum=0; cin>>n; for(int i=1;i<=n;i++) cin>>a[i],sum+=a[i]; sort(a+1,a+1+n); int countt=0; for(int i=1;i<n;i++){ if(a[i]==a[i+1]){ if(a[i]==0||(i>1&&a[i-1]+1==a[i])||++countt>1){ return puts("cslnb"),0; } } } sum-=n*(n-1)/2; if(sum%2==0) puts("cslnb"); else puts("sjfnb"); return 0; }
原文地址:https://www.cnblogs.com/starve/p/11180276.html
时间: 2024-10-09 20:48:10