SG函数应用

博客介绍了一个纸牌游戏,玩家轮流操作,每次操作分三步。DXS向你求助判断这局是否能获胜,给出了输入输出格式及示例,还指出这是SG函数板题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DXS和LCH在玩一个纸牌游戏,他们找来很多纸牌,每张牌上写有1到10其中的某一个数字,将牌面(有数字的一面)向上,摞成几堆。

他们两个轮流操作,每次操作分为三步:

1、选择一个牌堆。

2、从该堆由上向下依次拿走最少为0,最多为k的卡牌,但是要至少留下一张牌。

3、玩家查看当前牌堆顶的牌面数字,是多少就必须再从这堆牌由上至下拿走多少,如果牌不够拿了,这次操作就是不能执行的。

DXS发现LCH似乎很擅长这类游戏,他只要抓住机会就能获胜。好在LCH发扬风格,每次都让DXS先拿,但是DXS并没有找到这个游戏的窍门,于是他找到了你,想让你帮他看看这局他有没有可能获胜。

Input
每组数据的第一行包含两个数字n和k,接下来有n行,代表n个牌堆的状态,k的定义与题意相同。

每一行第一个数字是m,代表这堆牌有m张,接下来有m个数字,依次是从牌堆底到牌堆顶的所有牌面的数字。

1<=n<=100,1<=k<=10,1<=m<=1000。

Output
如果DXS能找到一种方法获胜,则输出“DXS is winner”,

如果这局DXS无法获胜,则输出“LCH is a cheater”。输出不包括引号。

Sample Input
2 1

6 2 1 2 1 2 1

6 2 1 2 1 2 1

2 1

1 1

3 1 2 1

4 3

10 3 5 6 9 8 7 4 2 1 1

8 1 1 1 1 3 2 2 2

9 2 2 2 3 3 3 2 2 2

5 1 2 3 2 1

Sample Output
LCH is a cheater

DXS is winner

DXS is winner
SG函数板题

#include<iostream>
#include<string>
#include<stdio.h>
#include<algorithm>
#include<bits/stdc++.h>
using namespace std;
const int maxn=10050;
int a[maxn];
int isok[maxn];
int vis[maxn];
int main()
{

    int n,k;
    while(~scanf("%d %d",&n,&k))
    {
        int flag=0;
        for(int i=1;i<=n;i++)
        {
            int l;
            scanf("%d",&l);
            for(int i=1;i<=l;i++)
                scanf("%d",&a[i]);
            isok[0]=0;
            for(int i=1;i<=l;i++)
            {
                memset(vis,0,sizeof vis);
                for(int j=0;j<=k;j++)
                {
                    if(i>j)
                    {
                        if((i-j)>=a[i-j])
                            vis[isok[i-j-a[i-j]]]=1;
                    }
                }
                int j=0;
                while(vis[j]) j++;
                isok[i]=j;
            }

            flag=flag^isok[l];
           // cout<<endl;
        }
        if(!flag)
        {
         cout<<"LCH is a cheater"<<endl;
        }
        else
        {
         cout<<"DXS is winner"<<endl;
        }
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值