【牛客 - 370 I 】Rinne Loves Xor(按位前缀和,异或)

题干:
 

Rinne 最近学习了位运算相关的知识,她想运用自己学习的知识发明一个加密算法。
首先她有一个源数组 A,还有一个密钥数组 B,现在她想生成加密后的数组 C。
她发明的方法是:当计算CiCi的时候,首先将 CiCi 赋值为Ci−1Ci−1,然后加上 AiAi 分别与每一个满足 j < i 的 BjBj 异或后的和,然后加上 BiBi 分别与每一个满足 j < i 的 AjAj 异或后的和,最后加上 AiAi 与 BiBi 的异或和。
形式化的讲,关于 CiCi 的递推式为以下式子:

C0=0C0=0

Ci=Ci−1+AixorBi+(∑i−1j=1(AixorBj+AjxorBi))Ci=Ci−1+AixorBi+(∑j=1i−1(AixorBj+AjxorBi))

现在她想用程序来实现这个过程,你能帮帮她吗?由于输出可能太大,你只需要输出每个 CiCi 模 109+7109+7的结果即可。

输入描述:

第一行一个整数 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

解题报告:

   依据异或的性质,统计前缀的每一位是1的数的个数,是0的数的个数,最后对于每一次查询,直接调用这个前缀,然后做一次异或就行了。

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
#define fi first
#define se second
using namespace std;
const int MAX = 2e5 + 5;
const ll mod = 1e9+7;
ll a[MAX],b[MAX],c[MAX];
ll A[33][2],B[33][2];
ll ans;
int main()
{int n;cin>>n;for(int i = 1; i<=n; i++) scanf("%lld",a+i);for(int i = 1; i<=n; i++) scanf("%lld",b+i);for(int i = 1; i<=n; i++) {ans = 0;ans = (c[i-1] + (a[i]^b[i]))%mod;for(int j = 0; j<33; j++) {ans += ((A[j][ !(b[i]>>j&1) ] + B[j][ !(a[i]>>j&1) ])<<j)%mod;A[j][a[i]>>j&1]++, B[j][b[i]>>j&1]++;}c[i] = ans%mod;}for(int i = 1; i<=n; i++) printf("%lld%c",c[i],i == n ? '\n' : ' ');return 0 ;}

 总结:

  几个小地方,以后寻找哪一位,还是用右移这种吧,,因为与运算完了之后就是非零即一,而不是非零即2^n。

 还有啊异或运算的优先级低于+运算,所以那个ans=的时候需要在 a[i]^b[i] 外面加括号。。

 

运用乘法原理也可以简单求出答案,因为通过画图不难看出,Ci其实就是A数组和B数组所有 非同一数组 的元素都进行过一次异或操作

AC代码2:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
#define fi first
#define se second
using namespace std;
const int MAX = 2e5 + 5;
const ll mod = 1e9+7;
ll a[MAX],b[MAX],c[MAX];
ll A[33][2],B[33][2];
int main()
{int n;cin>>n;for(int i = 1; i<=n; i++) scanf("%lld",a+i);for(int i = 1; i<=n; i++) scanf("%lld",b+i);for(int i = 1; i<=n; i++) {for(int j = 0; j<33; j++) {A[j][a[i]>>j&1]++, B[j][b[i]>>j&1]++;c[i] += ((A[j][0]*B[j][1]+A[j][1]*B[j][0])<<j)%mod;}}for(int i = 1; i<=n; i++) printf("%lld%c",c[i],i == n ? '\n' : ' ');return 0 ;}

写这份代码的时候傻了,,c[i]=了直接,应该是+=。。因为内层循环是要循环的啊、、又不是c[i]只算一遍。

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

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

相关文章

quartz mysql索引_分布式系统中的定时任务全解(二)

在实际项目中&#xff0c;通常需要用到定时任务(定时作业)&#xff0c;spring框架提供了很好的实现。 1、 下载spring-quartz插件包 这里默认当前系统中是集成了spring框架的基本功能的。去网上下载spring定时器的jar包&#xff0c;这里用的是quartz-all-1.8.4.jar&#xff0c…

【牛客 - 331B】炫酷五子棋(STLset 或Hash,tricks,二维map标记)

题干&#xff1a; 五子棋是一个简单的双人游戏。 小希最近在思索一种更好玩的五子棋。她希望胜利不再是谁先五子连珠谁赢&#xff0c;而变成谁落子后&#xff0c;该子与之前的子五子连珠的次数更多才能胜利。 但是如果是在普通的棋盘上&#xff0c;这个游戏又显得不是很有趣…

【牛客 - 318J】王者荣耀(dp,01背包)

题干&#xff1a; "无论何时何地&#xff0c;都会遵守约定"。"奋力逃吧"。"关于取下敌人性命这件事&#xff0c;也从不失约"。 小懒虫zmx平时最喜欢玩的游戏就是《王者荣耀》&#xff0c;在这款游戏中它也最喜欢百里守约这个英雄。最近&#x…

xodo上的笔记不见了_goodnotes 的笔记无缘无故丢失了一本,还能救回来吗?

真的什么都没有做&#xff0c;很普通的记完笔记放在那里去吃饭&#xff0c;回来的时候&#xff0c;别的笔记都没变化&#xff0c;只有我一直在用、刚记完的那一本消失了……我尝试过的方案&#xff1a;1.icloud刚开始不确定那里有没有&#xff0c;我平时是开着 icloud 对笔记的…

【牛客 - 318G】LLLYYY的数字思维 与【牛客 - 289J】这是一个沙雕题II(贪心构造)

题干&#xff1a; LLLYYY很喜欢写暴力模拟贪心思维。某一天在机房&#xff0c;他突然抛给了队友ppq一 个问题。问题如下&#xff1a; 有一个函数f ()&#xff1a; int f(int x){ int tmp 0; while(x ! 0){ tmp x % 10; x / 10; } return tmp; } 接着…

react div组件设置可点击不可点击_React面试全解

更新:收藏前点个赞亲&#xff0c;为啥我每次写的东西收藏都是赞的n倍&#xff01;&#xff01;花了一个月时间总结的React面试题 希望能帮助到你全文近万字建议保存仔细过一遍目录面试中常提的重要概念React生命周期ReduxRouter重要的方法面试中常提的重要概念1 什么是模块化是…

【牛客 - 185B】路径数量(离散数学,长度为k的路径数量,图)

题干&#xff1a; 给出一个 n * n 的邻接矩阵A. A是一个01矩阵 . A[i][j]1表示i号点和j号点之间有长度为1的边直接相连. 求出从 1 号点 到 n 号点长度为k的路径的数目. 输入描述: 第1行两个数n,k (20 ≤n ≤ 30,1 ≤ k ≤ 10) 第2行至第n1行&#xff0c;为一个邻接矩阵 …

php mysql 菜鸟_PHP 和 MySQL 基础教程(四)

PHP 和 MySQL 基础教程(四)发布时间&#xff1a;2016-06-17 来源&#xff1a; 点击:次MySQL 中的 SQL对于 MySQL &#xff0c;第一件你必须牢记的是它的每一行命令都是用分号 (;) 作为结束的&#xff0c;但……没有完全绝对的事&#xff0c;在这儿也是一样。前面我曾经讲到&…

【POJ - 1724 】ROADS (带限制的最短路 或 dfs 或 A*算法,双权值)

题干&#xff1a; N cities named with numbers 1 ... N are connected with one-way roads. Each road has two parameters associated with it : the road length and the toll that needs to be paid for the road (expressed in the number of coins). Bob and Alice use…

mysql 5.7.20 win64_Win10下MySQL5.7.20 Mysql(64位)解压版安装及bug修复

2、解压到某一文件夹&#xff0c;如“C:\Program Files\MySQL\mysql-5.7.20-winx64”3、添加环境变量(系统变量)&#xff1a;变量名&#xff1a;MYSQL_HOME变量值&#xff1a;C:\Program Files\MySQL\mysql-5.7.20-winx64&#xff1b;在系统变量path原有值后添加路径&#xff1…

【CodeForces - 474D】Flowers (线性dp)

题干&#xff1a; We saw the little game Marmot made for Moles lunch. Now its Marmots dinner time and, as we all know, Marmot eats flowers. At every dinner he eats some red and white flowers. Therefore a dinner can be represented as a sequence of several f…

mysql事务顺序重排_MySQL事务处理及字符集和校对顺序

一、事务处理 事务处理&#xff1a;是一种机制&#xff0c;管理必须成批执行的MySQL操作&#xff0c;以保证数据库不包含不完整的操作结果。用来维护数据库的完整性。利用事务处理&#xff0c;可以保证一组操作不会中途停止&#xff0c;或作为整体执行或完全不执行(除非明确指示…

mysql权重怎么配置_mysql如何按权重查询数据啊?

楼上的回答全都会错意了&#xff0c;题主意思是根据权重设定随机几率&#xff0c;例如 A 的权重为10&#xff0c;B 的权重为 5&#xff0c;这个时候随机出现 A 的几率要比出现 B 的几率高。你可以试试这个备选方案。就是先取出权重列表再去根据权重随机出来的那个权重值&#x…

【计蒜客 - 蓝桥训练】修建公路(贪心,或运算,dp)

题干&#xff1a; 蒜头国有 nn 座城市&#xff0c;编号分别为 0,1,2,3,\ldots,n-10,1,2,3,…,n−1。编号为 xx 和 yy 的两座城市之间如果要修高速公路&#xff0c;必须花费 x|yx∣y 个金币&#xff0c;其中|表示二进制按位或。 吝啬的国王想要花最少的价格修建高速公路&#…

【计蒜客 - 蓝桥训练】阶乘位数(数学,对数运算,求阶乘位数)

题干&#xff1a; 蒜头君对阶乘产生了兴趣&#xff0c;他列出了前 1010 个正整数的阶乘以及对应位数的表&#xff1a; nnn!n!位数111221361424251203672037504048403205936288061036288007 对于蒜头君来说&#xff0c;再往后就很难计算了。他试图寻找阶乘位数的规律&#xff…

mysql win10 优化设置_windows10如何优化?系统优化设置方法

windows10如何优化&#xff1f;&#xff0c;高系统效率&#xff0c;尽可能提高运行速度&#xff0c;是我们关心的问题。以下是电脑系统优化设置的4种方法&#xff0c;能够有效的提高系统的使用效率和优化系统管理&#xff0c;我们一起来看看吧&#xff01;第一招&#xff1a;删…

【牛客 - 368D】动态连通块(并查集+bitset优化)

题干&#xff1a; 小T有n个点&#xff0c;每个点可能是黑色的&#xff0c;可能是白色的。 小T对这张图的定义了白连通块和黑连通块&#xff1a; 白连通块&#xff1a;图中一个点集V&#xff0c;若满足所有点都是白点&#xff0c;并且V中任意两点都可以只经过V中的点互相到达&a…

mysql 执行计划extra_mysql执行计划explain type和extra

mysql执行计划&#xff0c;搞定type和extra就能优化大部分sql了。type为主&#xff0c;extra为辅。type&#xff1a;system表只有一行&#xff0c;MyISAM引擎。const常量连接&#xff0c;表最多只有一行匹配&#xff0c;通用用于主键或者唯一索引比较时eq_ref每次与之前的表合并…

【计蒜客 - 蓝桥训练】欧拉函数(数学,数论,模板)

题干&#xff1a; 在数论中&#xff0c;对正整数 nn&#xff0c;欧拉函数 \varphi (n)φ(n) 是小于等于 nn 的正整数中与 nn 互质的数的数目。 例如 \varphi (12)4φ(12)4&#xff0c;因为 1,5,7,111,5,7,11 均和 1212 互质。 代码框中的代码是一种求欧拉函数的实现&#xf…

spark中读取json_【spark】文件读写和JSON数据解析

1.读文件通过 sc.textFile(“file://")方法来读取文件到rdd中。val lines sc.textFile("file://")//文件地址或者HDFS文件路径本地地址"file:///home/hadoop/spark-1.6.0-bin-hadoop2.6/examples/src/main/resources/people.json"HDFS文件地址"…