Rinne Loves Xor

链接:

来源:牛客网

时间限制:C/C++ 2秒,其他语言4秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述
在这里插入图片描述

输入描述:
第一行一个整数 N,表示数组 A 和 B 的长度。
第二行 N 个整数表示数组 A。
第三行 N 个整数表示数组 B。
输出描述:
输出一行 N 个整数,表示加密后的数组 C。
示例1
输入
复制

10
65605 70259 77306 43823 61443 98602 9261 7662 46394 83019
81393 5966 61479 24259 92528 96132 35859 47981 11702 71736

输出
复制

15796 166270 623824 1132402 1650729 2445262 3256941 4150718 5106184 6353038

备注:
N≤105, ai≤109

题解:

本人也没做出来,看了其他题解,学到两个方法

方法一

参考题解
一下为个人结合题解的理解
暴力做O(n2)肯定超时
在这里插入图片描述
题目已经发式子给我们了,我们可以看出整个求解其实就是一个递推过程。由已知推位置,之前推出的后面也不会再修改。
异或:相同为0,不同为非0
最麻烦的就是后面这个部分在这里插入图片描述
这个累加式子我们可以拆开
在这里插入图片描述
既然是异或,我们就用二进制来考虑,a与b异或,我们也可以把a与b都分成二进制,题目给的a的范围小于1e9,也就是a二进制最多为32位,所以这样完全ok
两个数位不同为1,如果当前数字二进制是1,前面这个数的这个位置的数如果是0,就可以贡献出1;反之也是。如果两个相同,则无法贡献
我们用到一个sum数组
sum[i][0]

sum1[i][0] 表示前面的 a 数组中二进制第 i 位为0 的数目
sum1[i][1]sum1[i][1] 表示前面的 a 数组中二进制第 i 位为 1 的数目
sum2[i][0]sum2[i][0] 表示前面的 b 数组中二进制第 i 位为 0 的数目
sum2[i][1]sum2[i][1] 表示前面的b 数组中二进制第 i 位为 1 的数目

#include<bits/stdc++.h>
using namespace std;const long long inf = 1e18;
const int N = 1e6 + 5;
const double eps = 1e-10;
const int mod = 1e9 + 7;
typedef long long ll;ll a[N], b[N];
ll ans[N];
ll sum1[64][2], sum2[64][2];
ll qpow(ll a, ll b) {ll res = 1;while(b) {if(b & 1) {res = res * a % mod;}a = a * a % mod;b >>= 1;}return res;
}
int main() {int n;cin >> n;for(int i = 1; i <= n; i++) cin >> a[i];for(int i = 1; i <= n; i++) cin >> b[i];for(int i = 1; i <= n; i++) {ll p = ans[i - 1] + (a[i] ^ b[i]) % mod;for(int j = 0; j <= 32; j++) {if(a[i] & (1LL << j)) { // 该位为1p += qpow(2, j) * sum2[j][0] % mod;}else { // 该位为0p += qpow(2, j) * sum2[j][1] % mod;}//cout << j << ' ' << sum2[j][0] << ' ' << sum2[j][1] << "\n";}for(int j = 0; j <= 32; j++) {if(b[i] & (1LL << j)) { // 该位为1p += qpow(2, j) * sum1[j][0] % mod;}else { // 该位为0p += qpow(2, j) * sum1[j][1] % mod;}}ans[i] = p % mod;for(int j = 0; j <= 32; j++) {if(a[i] & (1LL << j)) {sum1[j][1]++;}else sum1[j][0]++;}for(int j = 0; j <= 32; j++) {if(b[i] & (1LL << j)) {sum2[j][1]++;}else sum2[j][0]++;}}for(int i = 1; i <= n; i++) {cout << ans[i] % mod << " \n"[i == n];}return 0;
}

方法二:

个人感觉和上一个方法处理思想其实差不多
也是分成二进制进行对应数位异或
式子:
Ci=Ci-1+ai xor b1+ai xor b2+…ai xor bi +ai-1 xor bi +…a1 xor bi

如果当前位数j,之前出现过4次1,另外一组出现过3次0,那么后面计算这一位给答案贡献就会是(4 * 3)<< j

pa[j][0/1]和pb[j][0/1]分别是a和b的在第j位之前0/1的数量
有个式子为
c[i] += (pa[j][0] * pb[j][1] + pa[j][1] * pb[j][0]) << j;
括号里就是相对应数位的数进行异或,而后面的<<j就是把这个数位的二进制转化成对应的十进制加给c

#include <iostream>
using namespace std;
typedef long long ll;const int MOD = 1e9 + 7;
const int maxn = 1e5 + 2;
ll a[maxn], b[maxn], c[maxn];
ll pa[37][2], pb[37][2];int main() {int n; cin>>n; for (int i = 1; i <= n; i++) cin>>a[i];for (int i = 1; i <= n; i++) cin>>b[i];for (int i = 1; i <= n; i++)for (int j = 0; j <= 30; j++) {pa[j][(a[i] >> j) & 1]++;pb[j][(b[i] >> j) & 1]++;//c[i] += (pa[j][0] * pb[j][1] + pa[j][1] * pb[j][0]) << j;c[i] %= MOD;}for (int i = 1; i <= n; i++)printf("%lld ", c[i]);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320224.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小麦亩产一千八(jzoj 3461)

小麦亩产一千八 jzoj 3461 题目大意 给你一个正整数序列&#xff1a;a0,a1,a2a_0,a_1,a_2a0​,a1​,a2​…… a0a_0a0​为1 a1a_1a1​为p axax−1ax−2(x>1)a_xa_{x-1} a_{x-2}(x>1)ax​ax−1​ax−2​(x>1) 现在给你三个数x&#xff0c;ax&#xff0c;yx&#xf…

Pipelines - .NET中的新IO API指引(一)

原文&#xff1a;https://blog.marcgravell.com/2018/07/pipe-dreams-part-1.html作者&#xff1a;marcgravell大约两年前&#xff0c;我发表了一篇关于.NET中即将到来的体验性新IO API的博文——在那时它被叫做"Channels"&#xff1b;在2018年的五月末&#xff0c;它…

[XSY] 分割(dfs树)

分割 题目相当于问 删掉两个点后 图是否仍然连通 割点问题&#xff0c;考虑用dfs树解决 设删去点u&#xff0c;v&#xff08;dfn[v]<dfn[u]&#xff09; 把 u, v 删去之后整棵树大概断成了几个部分&#xff1a; • v 上面到根的部分&#xff0c;以及上面挂着的那些东西&…

P4068-[SDOI2016]数字配对【二分,费用流】

正题 题目链接:https://www.luogu.com.cn/problem/P4068 题目大意 nnn种数字&#xff0c;第iii个是aia_iai​&#xff0c;有bib_ibi​个&#xff0c;价值为ci∗cjc_i*c_jci​∗cj​ 如果一个数字axa_xax​和aya_yay​配对要求axay\frac{a_x}{a_y}ay​ax​​是一个质数且产生c…

三分法讲解

二分用到的挺多&#xff0c;三分用的少&#xff0c;但也不能忘。。。 二分我们常常用于一个具有单调性的情况中求解某值 而三分就像是求一个凸性或凹形函数时&#xff0c;来求那个凹凸点 一开始L0&#xff0c;Rinf&#xff0c;然后也是不断缩小L与R的范围&#xff0c;逼近最值…

秀姿势(jzoj 3464)

秀姿势 jzoj 3464 题目大意 有n个数&#xff0c;每个数都有一个分组&#xff0c;现在问你最多去掉k个分组后&#xff0c;做多有多少个数是连续的同组的 输入样例 9 1 2 7 3 7 7 3 7 5 7输出样例 4样例解释 总共有9个学生&#xff0c;最多只能刷一次学生。 若不刷&#x…

使用C#读写结构化的二进制文件

最近工作上遇到一个问题&#xff0c;就是有将近200万个CSV文件&#xff0c;每个CSV文件包含了成千上万条实验数据&#xff0c;CSV以一个不连续的整数值作为文件名&#xff0c;比如&#xff1a;1.CSV、2.CSV、3.CSV、5.CSV等等。另外又有200万个XML文件&#xff0c;每个XML文件的…

[XSY] 相似(DP套DP)

相似 在看这道题前&#xff0c;有必要先看一下DP套DP的入门题[uoj3864]Hero meet devil&#xff0c;附上两篇写得不错的题解&#xff1a; https://blog.csdn.net/Ike940067893/article/details/87863041 https://www.cnblogs.com/RabbitHu/p/BZOJ3864.html 可以发现&#xff…

P3295-[SCOI2016]萌萌哒【ST表,并查集】

正题 题目链接:https://www.luogu.com.cn/problem/P3295 题目大意 一个nnn位的数字&#xff0c;mmm个条件给出两个完全相同的区间&#xff0c;求可能的数字数量。 解题思路 其实就是区间中的每个数字分别连边&#xff0c;但是这样显然会TTT。考虑通过消耗查询的复杂度来平衡…

牛客IOI周赛16-普及组

比赛链接 文章目录求导题目描述题解&#xff1a;猜数题意&#xff1a;题解&#xff1a;方法一 贪心方法二 暴力答题卡题意&#xff1a;题解&#xff1a;代码&#xff1a;求导 链接&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C …

【归并排序】休息(jzoj 3462)

休息 jzoj 3462 题目大意 给你一个序列&#xff0c;你每一回合把它划分成尽可能少的单调递减的序列&#xff08;第一次划分到的序列长度都是偶数&#xff09;&#xff0c;然后把每个序列翻转&#xff0c;问你把它变成单调递增的序列要翻转多少次 输入样例 6 5 3 2 1 6 4输…

Pipelines - .NET中的新IO API指引(二)

原文&#xff1a;Pipelines - a guided tour of the new IO API in .NET, part 2作者&#xff1a;marcgravell在上一章&#xff0c;我们讨论了以往的StreamAPI中存在的一些问题&#xff0c;并且介绍了Pipe,PipeWriter,PipeReader 等API&#xff0c;研究如何写出一个Pipe 并且从…

[XSY] 线图(树形DP、分类讨论)

线图 如图&#xff0c;每个L(L(T))上的点对应T上的一条三点链 在连接L(L(T))上两点&#xff0c;当且仅当两点代表的三点链在T上有共边&#xff0c;且边权为 共边边权*2非共边1边权非共边2边权 在L(L(T))上从点u走到点v&#xff0c;等价于u代表的三点链在T上删掉自己的一条边&…

Bzoj3309-DZY Loves Math【莫比乌斯反演,线性筛】

正题 bzoj没了&#xff0c;在darkbzoj交吧 题目链接:https://darkbzoj.tk/problem/3309 题目大意 定义f(x)f(x)f(x)表示xxx所有质因数中最大的指数幂。 求∑i1n∑j1mf(gcd(i,j))\sum_{i1}^n\sum_{j1}^mf(\ gcd(i,j)\ )i1∑n​j1∑m​f( gcd(i,j) ) 解题思路 很显然要用莫反…

牛客网【每日一题】4月29日题目精讲 Symmetric Matrix

链接&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 524288K&#xff0c;其他语言1048576K 64bit IO Format: %lld题目描述 输入描述: The input consists of several test cases and is terminated by end-of-file. Each test c…

邻接矩阵和邻接表的使用

邻接矩阵和邻接表的使用 邻接矩阵 为了遍历一个图&#xff0c;我们使用了邻接矩阵&#xff0c;及用ai,ja_{i,j}ai,j​表示由a到b的边权 注&#xff1a;若这两个点不相连或ijijij&#xff0c;那么这个值就会设定为一个非正常的值&#xff0c;以便遍历时特判不走这条边 使用&am…

YbtOJ#20239-[冲刺NOIP2020模拟赛Day10]连边方案【状压dp】

正题 题目链接:https://www.ybtoj.com.cn/contest/68/problem/3 题目大意 求有多少个nnn个点mmm条边的无向图满足 有连边的点之间编号差不超过kkk所有点的度数都为偶数 解题思路 因为kkk很小&#xff0c;所以我们考虑状压一个点前kkk个点的奇偶状态。设fi,j,s,0/1f_{i,j,s,…

有上下界网络流问题汇总

无源汇有上下界可行流 法一&#xff08;据说适合点少边多的图&#xff09;&#xff1a; 建图方法 首先建立附加源点ss和附加汇点tt对于原图中的边x->y&#xff0c;若限制为[b,c]&#xff0c;那么连边x->y&#xff0c;流量为c-b对于原图中的某一个点i&#xff0c;记d(i…

一个迄今为止最快的并发键值存储库FASTER诞生

FASTER在过去十年中&#xff0c;云中的数据密集型应用程序和服务有了巨大的增长。数据在各种边设施&#xff08;例如&#xff0c;设备&#xff0c;浏览器和服务器&#xff09;上创建&#xff0c;并由云应用程序处理用来获得数据价值或做出决策。应用程序和服务可以处理收集的数…

【斜率优化】仓库建设(luogu 2120)

仓库建设 luogu 2120 题目大意 有一个斜坡&#xff0c;上面有n个工厂&#xff08;山顶是1&#xff0c;山脚是nnn&#xff0c;工厂都是漏填&#xff09;&#xff0c;上面有pip_ipi​个货物&#xff0c;和工厂1的距离为x1x_1x1​ 现在有一场大雨&#xff0c;你可以在某些工厂处…