【每日一题】备战冲击蓝桥杯国赛——Python程序设计 | Day19 | 异或数列 | 真题代码解析

举报
府学路18号车神 发表于 2022/04/11 15:16:08 2022/04/11
【摘要】 每天刷一道题,话不多说,先刷近两年的题吧,现在是2021年的真题了,如果有一起的可以加入我们!!!一起来刷题,冲击国赛!!! 2021年第十二届蓝桥杯赛题总览2020年的题就是这些,类型分为两种,分别是结果填空和程序设计,我们每天刷一道题,省赛没问题! 异或数列 (题目)(本题总分:20分)官方练习系统:https://www.lanqiao.cn/problems/1462/learnin...

每天刷一道题,话不多说,先刷近两年的题吧,现在是2021年的真题了,如果有一起的可以加入我们!!!

一起来刷题,冲击国赛!!!


2021年第十二届蓝桥杯赛题总览

2020年的题就是这些,类型分为两种,分别是结果填空和程序设计,我们每天刷一道题,省赛没问题!
在这里插入图片描述

异或数列 (题目)

(本题总分:20分)

官方练习系统:https://www.lanqiao.cn/problems/1462/learning/


—>【问题描述】

在这里插入图片描述


解析


通过阅读题干,本题——难度中上:⭐⭐⭐⭐

考察类型:动态规划、取模

考察知识点:dp


分析:

这道题是考动态规划。下面就设计一下动态规划吧!~

  1. 状态设计:dp(i, j)表示前i个括号插入若干个括号后,左括号比有括号多j个的插入方法数字。
  2. 状态转移方程:dp(i,j)=dp(i-1,j-1)( s t r i str_i 左括号),dp(i,j)= Σ k = 0 j + 1 d p ( i 1 , k ) \Sigma_{k=0}^{j+1}dp(i-1, k) s t r i str_i 右括号)
  3. 状态转移优化:当 s t r i str_i 为右括号时,因 d p ( i , j 1 ) = Σ k = 0 j d p ( i 1 , k ) dp(i,j-1)=\Sigma_{k=0}^{j}dp(i-1,k) ,由此dp(i,j)=dp(i-1,j+1)+dp(i,j-1)。利用前缀和将 O ( n ) O(n) 的状态转移方程优化为 O ( 1 ) O(1)
  4. 初始状态: d p ( 0 , 0 ) = 1 dp(0,0)=1

CAUTION:要增加 vis 数组用于表示 dp 数组每个位置取模前的实际值是否为 0,如果只判断 dp值可能会出现 dp值实际不为 0 但是因为取模恰好为 0 的情况(虽然因为这个模数的特殊性,这个情况出现的概率几乎为 0 )

周末摸摸鱼~

下面直接开干!!!


代码

Python代码实现:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2022/3/13 14:36
# @Author  : 府学路18号车神
# @Email   :yurz_control@163.com
# @File    : demo.py

# 请在此输入您的代码
T = int(input())
for _ in range(T):
    a = list(map(int, input().split()))
    dp = []
    sum = 0
    ma = 0
    n = len(a)
    for i in range(1, n):
        dp.append(a[i])
        sum ^= a[i]
        ma = max(ma, a[i])

    if sum == 0:  # 每个不同位上的0和1个数分别为偶数
        print(0)
        continue

    x = 1
    while x < ma:
        x <<= 1

    while x > 0:
        one = 0
        zero = 0
        for i in dp:
            if i & x == 0:  # 关于x的第某位是否为0
                zero += 1
            else:
                one += 1
        if one % 2 == 1:  # 关于x的第某位1的个数为奇数
            if zero % 2 == 1 and one > 1:
                print(-1)
            else:
                print(1)
            break
        x >>= 1  # 关于x的第某位1的个数为偶数,则退位向下再次判断

在这里插入图片描述

由此,我们可以快速得出结果,验证完毕!明天最后一天,加油!!!


今天开刷第 十九 天,欢迎大家加入,一起变强,一起自律,一起上国赛!!!

有不同解法的可以在下面留言哦!~

往期刷题路线:

刷题路线 Detail
2020年
Day-01 门牌制作
Day-02 寻找2020
Day-03 跑步锻炼
Day-04 蛇形填数
Day-05 排序
Day-06 装饰珠
Day-07 成绩统计
Day-08 单词分析
Day-09 数字三角形
Day-10 平面切分
2021年
Day-11 卡片
Day-12 直线
Day-13 货物摆放
Day-14 路径
Day-15 回路计数
Day-16 时间显示
Day-17 杨辉三角
Day-18 左孩子右兄弟

官方刷题练习系统:http://lx.lanqiao.cn/


❤坚持读Paper,坚持做笔记,坚持学习,坚持刷力扣LeetCode❤!!!
坚持刷题!!!冲击国赛
To Be No.1

⚡⚡


创作不易⚡,过路能❤关注收藏点个赞三连就最好不过了

ღ( ´・ᴗ・` )

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。