1 条题解

  • 1
    @ 2022-8-30 9:47:05
    #include<bits/stdc++.h>
    #define maxn 100
    using namespace std;
    template<typename T> inline void read(T &x)
    {
        x=0;char c=getchar();bool flag=false;
        while(!isdigit(c)){if(c=='-')flag=true;c=getchar();}
        while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
        if(flag)x=-x;
    }
    int T,n,ans,tot,flag;
    int p[maxn],sg[maxn];
    bool vis[maxn];
    void SG()
    {
        for(int i=n-1;i;--i)
        {
            memset(vis,false,sizeof(vis));
            for(int j=i+1;j<=n;++j)
                for(int k=j;k<=n;++k)
                    vis[sg[j]^sg[k]]=true;
            int t=0;
            while(1)
            {
                if(!vis[t])
                {
                    sg[i]=t;
                    break;
                }
                t++;
            }
        }
    }
    int main()
    {
        read(T);
        while(T--)
        {
            read(n),sg[n]=ans=tot=flag=0;
            for(int i=1;i<=n;++i) read(p[i]);
            SG();
            for(int i=1;i<=n;++i)
                if(p[i]%2)
                    ans^=sg[i];
            for(int i=1;i<=n;++i)
            {
                if(!p[i]) continue;
                for(int j=i+1;j<=n;++j)
                {
                    for(int k=j;k<=n;++k)
                    {
                        if((ans^sg[i]^sg[j]^sg[k])==0)
                        {
                            tot++;
                            if(!flag)
                            {
                                flag=true;
                                printf("%d %d %d\n",i-1,j-1,k-1);
                            }
                        }
                    }
                }
            }
            if(!flag) puts("-1 -1 -1");
            printf("%d\n",tot);
        }
        return 0;
    }
    
    • 1

    信息

    ID
    1188
    时间
    1000ms
    内存
    162MiB
    难度
    6
    标签
    (无)
    递交数
    31
    已通过
    10
    上传者