【CF 1190B】 Tokitsukaze, CSL and Stone Game

Biu
啊啊啊啊啊啊啊啊啊啊啊我好激动啊终于AC这题了!!!(虽然这题较水
首先讲讲大概思路吧。可以得出,当一个人面前的石子是0—n-1的话,这个人必输。因为每人都绝( )顶( )聪( )明( ),所以总会到这种情况(例外下文分析),此时用奇偶判断就行了。
另外有其他情况:总和比0—n-1都小,此时其实是必有重复的!而这些已经被特判掉了。至于特判很多,我就不一一讲解,甩个代码就行了。

#include
#include
using namespace std;
const int N = 100002;
int n, a[N], tmp = -1, tot, b[N], cnt;
long long sum, Sum;
int main() {
 scanf("%d", &n);
 for(int i = 1; i <= n; i ++) {
  scanf("%d", &a[i]);
  sum += a[i];
  if(! a[i])
   cnt ++;
 }
 if(cnt >= 2)
  return ! printf("cslnb\n");
 Sum = n * (n - 1) >> 1;
 sort(a + 1, a + n + 1);
 if(a[2] == 1 && a[3] == 1 && a[1] == 0)
  return ! printf("cslnb\n");
 a[0] = -2;
 for(int i = 1; i <= n; i ++) {
  if(tmp == a[i]) {
   tot ++;
   if(tot >= 3)
    return ! printf("cslnb\n");
   if(tot == 2 && a[i - 2] == tmp - 1)
    return ! printf("cslnbppp\n");
  }
  else {
   b[tot] ++;
   if(tot == 2 && b[tot] >= 2)
    return ! printf("cslnb\n");
   tot = 1;
   tmp = a[i];
  }
 }
 b[tot] ++;
 if(tot == 2 && b[tot] >= 2)
  return ! printf("cslnb\n");
 if((sum - Sum) & 1)
  return ! printf("sjfnb\n");
 else
  return ! printf("cslnb\n");
 return 0;
}

写得挺丑,希望大佬在评论区指出错误。谢谢。

你可能感兴趣的:(#,博弈论,博弈论)