IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【Codeforces】1658D1 388535 (Easy Version) 题解 -> 正文阅读

[数据结构与算法]【Codeforces】1658D1 388535 (Easy Version) 题解

题目大意

给定两个数 l , r l, r l,r,将 [ l , l + 1 , . . . , r ? 1 , r ] [l, l + 1,..., r-1, r] [l,l+1,...,r?1,r]的一个任意排列,全部异或 x x x,得到一个新的数组 a a a

给定 l , r l, r l,r a a a数组,求 x x x

其中 0 = l ≤ r ≤ 2 17 0 = l \le r \le 2^{17} 0=lr217

题目链接

思路

我们按位处理,我们计算异或前的数组每一位 1 1 1的个数,设为 c n t A cntA cntA,计算异或后的数组每一位 1 1 1的个数,记为 c n t B cntB cntB

  1. 那么一旦 c n t A i ! = c n t B i cntA_i != cntB_i cntAi?!=cntBi?,那么就说明 x x x这一位一定为 1 1 1

  2. 对于 c n t A i = = c n t B i cntA_i == cntB_i cntAi?==cntBi?一样的位数,说明这一位可以为 1 1 1,也可以为 0 0 0

因为 l = 0 l=0 l=0,所以2.总是成立,因为异或后的数组一定有一个 x x x,异或前有个 0 0 0,所以 x x x某一位为 1 1 1,那么异或后的数这一位 1 1 1的数量一定会变化。

而一旦 l =? 0 l \not = 0 l?=0,那么就有可能 1 1 1变为 0 0 0, 0 0 0变为 1 1 1的数量相同,抵消掉了,比如 [ 1 , 2 ] ⊕ 2 = [ 0 , 3 ] [1,2] \oplus 2 = [0,3] [1,2]2=[0,3],前后每一位 1 1 1的数量都相同。

代码

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;

const int maxN = 1e5 + 7;

int T, l, r, cnt1[53], cnt2[53];

inline void calc(int *cnt, int x)
{
    int now = 0;
    while(x) {
        if(x & 1)
            cnt[now]++;
        now++; x >>= 1;
    }
}

int main()
{
    scanf("%d", &T);
    while(T--) {
        memset(cnt1, 0, sizeof cnt1);
        memset(cnt2, 0, sizeof cnt2);
        scanf("%d%d", &l, &r);
        for(int i = l; i <= r; ++i) {
            calc(cnt1, i);
            int x; scanf("%d", &x);
            calc(cnt2, x);
        }
        int ans = 0;
        for(int i = 0; i < 31; ++i)
            if(cnt1[i] != cnt2[i])
                ans |= (1 << i);
        printf("%d\n", ans);
    }
    return 0;
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 23:38:43  更:2022-04-01 23:42:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 9:57:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码