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 ;
    }
    
  • 相关阅读:
    文件数据分析制作过程【1】
    VBA学习(4)
    QTP9.2 .net与java插件破解
    GPRS开发系列文章之实战篇
    time_t到.NET的转换
    RAS函数
    GPRS开发系列文章之入门篇
    [转]惹恼程序员的十件事
    好玩和可爱的网站
    GPRS开发系列文章之进阶篇
  • 原文地址:https://www.cnblogs.com/nonames/p/12240791.html
Copyright © 2011-2022 走看看