1 条题解

  • 0
    @ 2025-10-8 17:05:32
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e6+10;
    int m,n,a[N],f[N],l[N],len;
    int main()
    {
        scanf("%d%d",&m,&n);
        for(int i=1;i<=n;i++)scanf("%d",&a[i]);
        sort(a+1,a+n+1);a[n+1]=m-1;a[0]=-0x3f3f3f3f;
        if(m-2==a[n]){while(a[n]==a[n-1]+1)n--;n--;}
        if(!n){printf("0\n");return 0;}
        len=1;f[1]=a[n+1]-a[n]-1,l[1]=1;
        for(int i=n-1;i>=1;i--)
        {
            if(a[i]==a[i+1]-1)l[len]++;
            else len++,f[len]=f[len-1]+a[i+1]-a[i]-1,l[len]=1;
        }
        if(a[n]==m-1){printf("%d\n",l[1]);return 0;}
        int ans=0,ss=0;
        for(int i=1;i<=len;i++)if(f[i]%2)ans^=l[i];
        if(!ans){printf("0\n");return 0;}
        for(int i=1;i<=len;i++)
            if(f[i]%2)
            {
                if(l[i]>=(l[i]^ans)&&(f[i+1]-1!=f[i]))ss++;
            }
            else
            {
                if(f[i]-1!=f[i-1])
                {
                    if(l[i]>=ans)ss++;
                }
                else if(l[i]+l[i-1]>(l[i-1]^ans))ss++;
            }
        printf("%d\n",ss);
        return 0;
    }
    

    • 1

    *【博弈SG】阶梯nim练习2[POI 2004] Gra

    信息

    ID
    3731
    时间
    1000ms
    内存
    128MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者