Python实现,历届真题 异或数列【第十二届】【省赛】【研究生组】

编码思路:(原代码在最后) 

#先保存每一组输入

#拆分出每一组查询数,分开处理

        #处理特殊情况 如1 0 或者 4 0 0 0 0等,则A,B都无法改变,直接equal

#构建一个计数数组,方便后面看1的奇数、偶数

        #最大的数,的二进制位数长度

#统计所有数的二进制对应位数的1的个数

#寻找1的数量为奇数的最高位

#各二进制位上1的数量全是偶数,equal

#最高位只有一个1,或者最高位1的数量为奇数且总的数量为奇数,则A先手,A win

#最高位1的数量为奇数且总的数量为偶数,则B后手,B win

#先保存每一组输入
T = int(input())
sum = []
for i in range(T):
    q = []
    str1 = input()
    q = [int(x) for x in str1.split(' ')]
    q.pop(0)
    sum.append(q)
#拆分出每一组查询数,分开处理
for y in range(T):
    Maxx = 0#初始
    if max(sum[y]) > Maxx:
        Maxx = max(sum[y])
        
    #处理特殊情况 如1 0 或者 4 0 0 0 0等,则A,B都无法改变,直接equal
    if Maxx == 0:
        print(0)
        continue#直接跳到下一组询问数
    
    #构建一个计数数组,方便后面看1的奇数、偶数
    count = []
    k = lenth = 0
    while Maxx != 0:    
        k = Maxx % 2
        Maxx = int(Maxx/2)
        count.append(0)
        lenth = lenth + 1#最大的数,的二进制位数长度

    #统计所有数的二进制对应位数的1的个数
    i = k = 0
    for x in sum[y]:
        i = 0
        while x != 0:    
            k = x % 2
            x = int(x/2)
            count[i] += k
            i += 1#继续

    #寻找1的数量为奇数的最高位
    while count[lenth - 1] % 2 == 0:
        lenth = lenth - 1
        if lenth == 0:
            break
    
    if lenth == 0:#各二进制位上1的数量全是偶数,equal
        print(0)
    elif count[lenth - 1] == 1 or len(sum[y]) % 2 != 0:
        #最高位只有一个1,或者最高位1的数量为奇数且总的数量为奇数,则A先手,A win
        print(1)
    else:#最高位1的数量为奇数且总的数量为偶数,则B后手,B win
        print(-1)
        
#测试用例
# 4
# 1 1
# 1 0
# 2 2 1
# 7 992438 1006399 781139 985280 4729 872779 563580
# 3
# 12 0 1 0 1 1 0 0 0 1 0 0 0
# 12 1 1 0 1 1 0 0 0 1 0 0 0
# 12 0 0 1 1 1 0 0 0 1 0 0 0

 思路参考了了许多文章,这篇讲解不错:java实现的:异或数列蓝桥杯_望 望的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值