Luogu P4932 浏览器(二进制)
题意
题目背景
__stdcall在用\(Edge\)玩\(slay\)的时候,鼠标会经常失灵,这让她十分痛苦,因此她决定也要让你们感受一下\(Edge\)制造的痛苦。
题目描述
__stdcall给了你\(n\)个点,第\(i\)个点有权值\(x[i]\),对于两个点\(u\)和\(v\),如果\(x[u]\ xor\ x[v]\)的结果在二进制表示下有奇数个\(1\),那么在\(u\)和\(v\)之间连接一个\(Edge\),现在__stdcall想让你求出一共有多少个\(Edge\)。
如果你没能成功完成任务,那么__stdcall会让你痛苦一下,你这个测试点就没分了。
输入输出格式
输入格式:
一行六个整数,\(n,a,b,c,d,x[0]\)。
\(n\)是点的个数,每个点的权值需要用如下的方式生成。
你需要使用\(a,b,c,d\)和\(x[0]\)生成一个数组\(x\),生成方式是这样的。
\]
\(x[i]\)就是第\(i\)个点的权值,点的标号是\(1\)到\(n\)。
输出格式:
输出一个整数,表示一共有多少个\(Edge\)。
输入输出样例
输入样例#1:
8 98 24 20 100 44
输出样例#1:
12
输入样例#2:
1000 952537 601907 686180 1000000 673601
输出样例#2:
249711
说明
我们用\(v\)表示权值中的最大值。
对于前\(20\%\)的数据,\(n\leq 10\)。
对于前\(40\%\)的数据,\(n\leq 100\)。
对于前\(60\%\)的数据,\(n\leq 1000\)。
对于前\(80\%\)的数据,\(n\leq 1e6\)。
对于前\(90\%\)的数据,\(v\leq 1e6\)。
对于\(100\%\)的数据,\(n\leq 1e7,v\leq1e9\)。
保证\(a,b,c,d,x[0]\)都是\(int\)内的非负整数。
思路
O(n^2)做法:
我们直接把\(x\)数组搞出来,然后暴力两两匹配看两者的异或值的二进制表示是否只有一个\(1\),逐个统计答案。
O(n)做法:
这题的做法是真的好玩。其实就是一个结论:两个数字的异或值在二进制表示下为奇数,当且仅当两个数字的二进制表示中\(1\)的个数一个为奇数,一个为偶数。
比如说两个偶数\(a,b\),它们的二进制表示下有\(x\)位同为\(1\),有\(y\)位\(a\)是\(1\)而\(b\)是零,有\(z\)位\(a\)是\(0\)而\(b\)是\(1\),那么\((x+y)\mod 2=0\),且\((x+z)\mod 2=0\),所以有\((x+y+x+z)\mod 2=0\),也就是\((y+z)\mod 2=0\)。其他情况证明相同。
所以只需要统计出所有数中二进制表示中\(1\)的个数为奇数的数的个数与为偶数的数的个数,相乘得到答案。
AC代码
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL n,a,b,c,d,ans[2],x;
LL read()
{
LL re=0;char ch=getchar();
while(!isdigit(ch)) ch=getchar();
while(isdigit(ch)) re=(re<<3)+(re<<1)+ch-'0',ch=getchar();
return re;
}
int main()
{
n=read(),a=read(),b=read(),c=read(),d=read(),x=read();
a%=d,b%=d,c%=d,x%=d;
for(LL i=1;i<=n;i++) x=(a*x%d*x%d+b*x%d+c)%d,ans[__builtin_popcount(x)&1]++;
printf("%lld",ans[0]*ans[1]);
return 0;
}
Luogu P4932 浏览器(二进制)的更多相关文章
- P4932 浏览器(统计二进制1的个数)
P4932 浏览器 有\(n\)个数,\(x_1,x_2,\cdots,x_n\),问你有多少对\((u,v)\),使得\(x_u\operatorname{xor}x_v\)的二进制表示中有奇数个\ ...
- 洛谷——P4932 浏览器
P4932 浏览器 __stdcall给了你n个点,第i个点有权值x[i],对于两个点u和v,如果x[u] xor x[v]的结果在二进制表示下有奇数个1,那么在u和v之间连接一个Edge,现在__s ...
- luogu P4428 [BJOI2018]二进制
luogu 先考虑怎样的二进制串才会被3整除.可以发现如果二进制位第\(0,2,4...2n\)位如果为\(1\),那么在模3意义下为1,如果二进制位第\(1,3,5...2n+1\)位如果为\(1\ ...
- P4932 浏览器
题目背景 __stdcall在用Edge玩slay的时候,鼠标会经常失灵,这让她十分痛苦,因此她决定也要让你们感受一下Edge制造的痛苦. 题目描述 __stdcall给了你n个点,第i个点有权值x[ ...
- 洛谷 P4932 浏览器 (思维题)
题目大意:给你一个序列,求满足$x_{i}\: xor\; x_{j}$在二进制下1的数量为奇数的数对数量 打月赛的时候真没想出来,还是我太弱.. xor意义下,对于两个数,假设它们两个每一位都是2个 ...
- [LUOGU]4932 浏览器
\(\_\_stdcall\)大佬出的题\(Orz\) 我们惊奇地发现,加入\(\_\_popcount(x)\)和\(\_\_popcount(y)\)的奇偶数性相同,那么\(\_\_popcoun ...
- ZJOI2019一轮停课刷题记录
Preface 菜鸡HL终于狗来了他的省选停课,这次的时间很长,暂定停到一试结束,不过有机会二试的话还是可以搞到4月了 这段时间的学习就变得量大而且杂了,一般以刷薄弱的知识点和补一些新的奇怪技巧为主. ...
- Javascript的二进制数据处理学习 ——nodejs环境和浏览器环境分别分析
以前用JavaScript主要是处理常规的数字.字符串.数组对象等数据,基本没有试过用JavaScript处理二进制数据块,最近的项目中涉及到这方面的东西,就花一段时间学了下这方面的API,在此总结一 ...
- 框架基础:ajax设计方案(六)--- 全局配置、请求格式拓展和优化、请求二进制类型、浏览器错误搜集以及npm打包发布
距离上一次博客大概好多好多时间了,感觉再不搞点东西出来,感觉就废了的感觉.这段时间回老家学习驾照,修养,然后7月底来上海求职(面了4家,拿了3家office),然后入职同程旅游,项目赶进度等等一系列的 ...
随机推荐
- wordpress 获取所有管理员的邮箱
function get_administrator_email(){ $blogUsers = get_users('role=Administrator'); $adminEmails = arr ...
- thinkphp5+GatewayWorker+Workerman
项目地址 ttps://www.workerman.net/workerman-chat thinkphp5+GatewayWorker+Workerman聊天室,可以多人聊天,指定某个人进行聊天, ...
- Oracle大数据查询优化
1.对于像状态之类的列,不是很多的,就可以加位图索引,对于唯一的列,就加唯一索引,其余的创建普通索引. 2.尽量不要使用select * 这样的查询,指定需要查询的列. 3.使用hits selec ...
- day32--面向对象的程序设计之继承实现的原理(继承顺序)、封装、property
Python之路,Day19 = 面向对象的程序设计之继承实现的原理(继承顺序).封装.property 以下类容参考自:http://www.cnblogs.com/metianzing/p/712 ...
- win10 mysql5.7指定某个配置文件启动
点击开始菜单,搜索cmd.exe,左击以管理员身份运行 C:\Users\Administrator>cd C:\Program Files\MySQL\MySQL Server 5.7\bin ...
- 跨域问题The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'. The credentials mode of requests initiated by t
withCredentials 属性 上面说到,CORS请求默认不发送Cookie和HTTP认证信息.如果要把Cookie发到服务器,一方面要服务器同意,指定Access-Control-Allow- ...
- 锁定文件失败 打不开磁盘“D:\vms\S1\CentOS 64 位.vmdk”或它所依赖的某个快照磁盘(强制关机后引起的问题)
电脑强制关机后,centos系统启动失败,报异常:锁定文件失败 打不开磁盘“D:\vms\S1\CentOS 64 位.vmdk”或它所依赖的某个快照磁盘.解决办法:进入D:\vms\S1目录,删除下 ...
- 在select标签中添加a标签
<!--第一个选项不能写连接--> <select id="" onchange="window.location=this.value"&g ...
- 存储过程被程序和第三方客户端执行很慢,而sql server management studio执行速度正常
来自:http://blog.csdn.net/pgbiao/article/details/22388945 原因分析:由于存储过程是预编译的, 在第一次执行的时候, 会生成执行计划, 以后执行的时 ...
- VS2010-MFC(常用控件:滚动条控件Scroll Bar)
转自:http://www.jizhuomi.com/software/191.html 滚动条控件简介 滚动条大家也很熟悉了,Windows窗口中很多都有滚动条.前面讲的列表框和组合框设置了相应属性 ...