当前位置: 首页 > article >正文

【异或数列——博弈论】

题目

思路

  1. 异或和为0(即每一位都有偶数个1):平局
  2. 最高有效位只有唯一的1:先手必胜
  3. 最高有效位有奇数个1,偶数个0:先手必胜
    1. 若先选1产生优势,则剩下偶数个1,偶数个0:对手选1我选1抵消他的影响,对手选0我选0,必胜
  4. 最高有效位有奇数个1,奇数个0:先手必败
    1. 若先选0,则对手拿到状态3,必败,不可取
    2. 若先选1,则剩下偶数个1,奇数个0:对手坚持拿0,我不敢拿1(不然对手会得状态3)只能拿0,但是最后一个0被对手拿走,最后我拿走两个1,剩下奇数个1,必败
    3. 因此先手必败

代码

#include <bits/stdc++.h>
using namespace std;
const int N = 20;
int main()
{
    int t;
    cin >> t;
    while(t--)
    {
        int cnt[N] = {0};
        int sum = 0;
        
        int n;
        cin >> n;
        for(int i = 1; i <= n; i++)
        {
            int x;
            cin >> x;
            sum ^= x;
            for(int i = 0; i < N; i++)
                cnt[i] += x >> i & 1;
        }
        
        if(!sum) cout << "0\n";
        else
        {
            for(int i = N-1; i >= 0; i--)
            {
                if(sum >> i & 1)
                {
                    if(cnt[i] == 1 || (n - cnt[i]) % 2 == 0) cout << "1\n";
                    else cout << "-1\n";
                    break;
                }
            }
        }
    }
}


http://www.kler.cn/a/547791.html

相关文章:

  • 【BUUCTF】[网鼎杯 2018]Comment
  • Maven打包保留参数名称
  • 家里WiFi信号穿墙后信号太差怎么处理?
  • vue框架生命周期详细解析
  • Java+机器学习基础:打造AI学习基础Demo
  • 12苍穹外卖之工作台(Apache POI、Excel)
  • SQLServer联合winform 制作一个简单注册登录系统
  • 随手记:小程序setData 数据传输长度为 XXXKB,存在有性能问题!小程序长列表性能优化,uni.createIntersectionObserver
  • 国产编辑器EverEdit - 上下翻滚不迷路(历史编辑位置、历史光标位置回溯功能)
  • 【开源免费】基于SpringBoot+Vue.JS医药管理系统(JAVA毕业设计)
  • 【Java学习】类和对象
  • 【第9章:计算机视觉实战—9.4 计算机视觉在其他领域的应用探索】
  • Linux系统编程之基本信号处理
  • linux--关于makefile
  • 如何使用UniApp实现页面跳转和数据传递?
  • iOS实现生物识别
  • 【k8s应用管理】kubernetes 安全机制
  • 【prompt实战】旅行攻略顾问
  • PHP 基础介绍
  • 青少年编程与数学 02-009 Django 5 Web 编程 14课题、命名空间