首页 > 其他分享 >P9236 [蓝桥杯 2023 省 A] 异或和之和题解

P9236 [蓝桥杯 2023 省 A] 异或和之和题解

时间:2023-08-22 21:11:27浏览次数:45  
标签:le int 题解 sum long 蓝桥 异或 ans

思路

题目给我们一个数组 \(a\),那么我们可以算出其异或前缀和 \(sum\)。

我们知道,算出 \([l, r]\) 的异或和可以这样计算:\(sum_r \oplus sum_{l - 1}\)。

那么问题就转换为了 \(sum_{0\sim n}\) 这 \(n + 1\) 个数字两两异或之和(当然 \(sum_i \oplus sum_j\) 和 \(sum_j\oplus sum_i\) 是一样的,不重复计算)。

那我们遍历 \(sum\) 数组,然后计算出 \(w_{i, j}\) 数组表示所有数字在二进制表示下第 \(i\) 位为 \(j\) 的数字个数(\(0 \le i \le 20, 0 \le j \le 1\))。

对于第 \(i\) 位,如果有两个数字的第 \(i\) 位分别为 \(0, 1\),那么就可以贡献 \(2^i\) 的和。

根据乘法原理,对于第 \(i\) 位可以凑出 \(w_{i, 0}\cdot w_{i, 1}\) 这么多对可以对答案有贡献的组合,它们的贡献都是 \(2 ^ i\),所以可以让 \(ans\) 加上 \(w_{i, 0}\cdot w_{i, 1}\cdot2^i\)。

代码

注意要开 long long

#include <bits/stdc++.h>

using namespace std;
using i64 = long long;

const int N =  100010, M = 25;

int n;
int a[N];
int w[M][2];

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i], a[i] ^= a[i - 1];

    for (int i = 0; i <= n; i++) {
        for (int j = 0; j < M; j++) {
            w[j][a[i] >> j & 1] ++;
        }
    }

    i64 ans = 0;

    for (int i = 0; i < M; i++) ans += (1ll * w[i][0] * w[i][1] * (1 << i));
    cout << ans << '\n';
    return 0;
}

参考文献:

https://www.luogu.com.cn/blog/w9095/solution-p9236

标签:le,int,题解,sum,long,蓝桥,异或,ans
From: https://www.cnblogs.com/Yuan-Jiawei/p/17649697.html

相关文章

  • 8.22 [CSP-S 2021] 交通规划 题解
    #include<bits/stdc++.h>usingnamespacestd;usingpii=pair<int,int>;constexprintN=3e5+5,S=2e3+5,K=1e2+5,INF=0x3f3f3f3f;intn,m,T,poi[N];inthed[N],nxt[N<<2],rch[N<<2],val[N<<2],idx;vo......
  • P3089 题解
    P3089令\(f_1[i][j]\)表示向右跳,从\(j\)跳到\(i\)的最大总得分,有状态转移方程:\[f_1[i][j]=\displaystyle\max_{k<j<i,x_j-x_k\lex_i-x_j}\{f_1[j][k]+s_i\}\]将\(s_i\)看作定值,整理得\(f_1[i][j]=\displaystyle\max_{k<j<i,x_j-x_k\lex_i-x_j}\{f_1[j][......
  • 蓝桥杯省赛真题(砍树 整数删除 景区导游 翻转硬币)
    蓝桥杯省赛真题(砍树整数删除景区导游翻转硬币)四道比较难的题(题解是官方提供的)砍树(树上差分)https://www.lanqiao.cn/problems/3517/learning/解题思路在这个问题中,我们需要找到一条边,砍掉它之后,所有给出的节点对\((a_i,b_i)\)之间都不再连通。换言之,这条边应是所有\((......
  • P2572 序列操作 题解
    link。对平衡树的懒标记的应用题,其实和线段树也差不多。如果不考虑取反操作,那维护操作\(5\)就需要知道当前区间答案,当前区间前缀和后缀,因为在push_up时我们当前区间的答案肯定等于左区间的答案,右区间的答案以及左区间的后缀加上右区间的前缀这三者间的最大值。但与线段树不......
  • AGC032 A-D题解
    A最后一次插入的数的值与位置一定相同考虑倒着做每次从左往右扫一遍当遇到a[i]==i时将此数删除并跳出B当n为5时构造出的图如下(图形编辑器(csacademy.com))那么我们猜想当n为奇数时将n与其他点连边i与除了n-i的其他点连边证明:n的邻接点的编号之和为(n......
  • iOS开发之--获取验证码倒计时及闪烁问题解决方案
    大家在做验证码的时候一般都会用到倒计时,基本上大家实现的方式都差不多,先贴出一些代码来..-(void)startTime{__blockinttimeout=59;//倒计时时间dispatch_queue_tqueue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);dispatch_source......
  • 国标GB28181视频平台EasyGBS国标平台激活码授权提示“授权失败”的问题解决方案
    EasyGBS平台是基于国标GB28181协议的视频云服务平台,支持多路设备接入,并对多平台、多终端分发出RTSP、RTMP、FLV、HLS、WebRTC等多种格式的视频流。平台可为大数据等综合性监管平台提供极强的视频能力,既能作为能力平台为业务层提供接口调用,也可作为业务平台使用。有用户反馈,现场Easy......
  • [CSP-J 2021] 网络连接 题解
    传送门早期题解,转自博客QwQ本蒟蒻为数不多过了的黄题,祝贺!!!题面[CSP-J2021]网络连接题目描述TCP/IP协议是网络通信领域的一项重要协议。今天你的任务,就是尝试利用这个协议,还原一个简化后的网络连接场景。在本问题中,计算机分为两大类:服务机(Server)和客户机(Client)。服务机......
  • 「JLOI2014」松鼠的新家 题解
    「JLOI2014」松鼠的新家前言这道题倒也不是很难,只是有一些小坑需要避一下,可以看作半个LCA树上差分裸题。解析考虑维护一个树,点\(u\)表示每个房间需要的糖果数\(s_u\),而维尼在参观房间时从\(a\)到\(b\)就需要在\((a,\tob)\)的路径上的每个房间都摆上一个糖果,这时直......
  • [ABC098D] Xor Sum 2 题解
    题解传送门题目大意给出一个序列\(A\),求\(A_l\oplusA_{l+1}\oplus\dots\oplusA_r=A_l+A_{l+1}+\dots+A_r\)(\(\oplus\)即为\(xor\)异或)解析众所周知,异或是位运算中的一种不进位加法,即为如果两个\(bit\)相等返回\(0\),反之返回\(1\)。为什么说是不......