zoukankan      html  css  js  c++  java
  • D. Tokitsukaze, CSL and Stone Game

    https://codeforces.com/contest/1191/problem/D

    题意:n堆石子,谁最后没有石子可取谁输,谁取完之后存在两堆相等的石子数谁输。

    分情况:

    1、只有一堆石子只需判断奇偶。

    2、多于两堆:先手输:存在两堆相等数超过两对、存在三堆相等、存在两个0堆、只存在一对两堆(a)相等且存在一堆数为(a-1)。

    3、除去以上情况后,排序,最终每个数可走a[i] - i - 1 步,判断奇偶即可。

    //#include <bits/stdc++.h>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #include <iostream>
    #include <cstdio>
    #include <string>
    #include <stdio.h>
    #include <queue>
    #include <stack>
    #include <map>
    #include <set>
    #include <string.h>
    #include <vector>
    #define ME(x , y) memset(x , y , sizeof(x))
    #define SF(n) scanf("%d" , &n)
    #define rep(i , n) for(int i = 0 ; i < n ; i ++)
    #define INF  0x3f3f3f3f
    #define mod 1000000007
    #define PI acos(-1)
    using namespace std;
    typedef long long ll ;
    int a[100009];
    map<int , int>m;
    
    int main()
    {
        int n ;
        scanf("%d" , &n);
        for(int i = 0 ; i < n ; i++)
        {
            scanf("%d" , &a[i]);
        }
        if(n == 1)
        {
            if(a[0] % 2 == 0)
            {
                cout << "cslnb" << endl;
            }
            else{
                cout << "sjfnb" << endl ;
            }
        }
        else
        {
            int flag1 = 0 , flag2 = 0 ;
            for(int i = 0 ; i < n ; i++)
            {
                m[a[i]]++ ;
                if(m[a[i]] >= 2)
                {
                    flag1++ ;
                }
            }
            if(flag1 >= 2|| m[0] >= 2)
            {
                cout << "cslnb" << endl;
            }
            else{
                ll  sum = 0 ;
                sort(a , a+n);
                for(int i = 1 ; i < n ; i++)
                {
                    if(a[i] == a[i-1])
                    {
                        if(i >= 2 && a[i] == a[i-2]+1)
                        {
                            cout << "cslnb" << endl ;
                            return 0 ;
                        }
                    }
                }
                for(int i = 0 ; i < n ; i++)
                {
                    sum += a[i] - i ;
                }
                if(sum % 2 == 0)
                {
                    cout << "cslnb" << endl ;
                }
                else{
                    cout << "sjfnb" << endl ;
                }
            }
        }
    
        return 0 ;
    }
    
  • 相关阅读:
    JZOJ 3034. 【NOIP2012模拟10.17】独立集
    JZOJ 3035. 【NOIP2012模拟10.17】铁轨
    JZOJ 1259. 牛棚安排
    数位DP JZOJ 3316. 非回文数字
    JZOJ 3046. 游戏
    JZOJ 3013. 填充棋盘
    debian 安装oracle提供的java8
    java 汉字转拼音 PinYin4j
    debian ssh设置root权限登陆 Permission denied, please try again
    java并发下订单生成策略
  • 原文地址:https://www.cnblogs.com/nonames/p/12240791.html
Copyright © 2011-2022 走看看