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=(ax_{i-1}^2+bx_{i-1}+c)\mod d
\]

\(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 浏览器(二进制)的更多相关文章

  1. P4932 浏览器(统计二进制1的个数)

    P4932 浏览器 有\(n\)个数,\(x_1,x_2,\cdots,x_n\),问你有多少对\((u,v)\),使得\(x_u\operatorname{xor}x_v\)的二进制表示中有奇数个\ ...

  2. 洛谷——P4932 浏览器

    P4932 浏览器 __stdcall给了你n个点,第i个点有权值x[i],对于两个点u和v,如果x[u] xor x[v]的结果在二进制表示下有奇数个1,那么在u和v之间连接一个Edge,现在__s ...

  3. luogu P4428 [BJOI2018]二进制

    luogu 先考虑怎样的二进制串才会被3整除.可以发现如果二进制位第\(0,2,4...2n\)位如果为\(1\),那么在模3意义下为1,如果二进制位第\(1,3,5...2n+1\)位如果为\(1\ ...

  4. P4932 浏览器

    题目背景 __stdcall在用Edge玩slay的时候,鼠标会经常失灵,这让她十分痛苦,因此她决定也要让你们感受一下Edge制造的痛苦. 题目描述 __stdcall给了你n个点,第i个点有权值x[ ...

  5. 洛谷 P4932 浏览器 (思维题)

    题目大意:给你一个序列,求满足$x_{i}\: xor\; x_{j}$在二进制下1的数量为奇数的数对数量 打月赛的时候真没想出来,还是我太弱.. xor意义下,对于两个数,假设它们两个每一位都是2个 ...

  6. [LUOGU]4932 浏览器

    \(\_\_stdcall\)大佬出的题\(Orz\) 我们惊奇地发现,加入\(\_\_popcount(x)\)和\(\_\_popcount(y)\)的奇偶数性相同,那么\(\_\_popcoun ...

  7. ZJOI2019一轮停课刷题记录

    Preface 菜鸡HL终于狗来了他的省选停课,这次的时间很长,暂定停到一试结束,不过有机会二试的话还是可以搞到4月了 这段时间的学习就变得量大而且杂了,一般以刷薄弱的知识点和补一些新的奇怪技巧为主. ...

  8. Javascript的二进制数据处理学习 ——nodejs环境和浏览器环境分别分析

    以前用JavaScript主要是处理常规的数字.字符串.数组对象等数据,基本没有试过用JavaScript处理二进制数据块,最近的项目中涉及到这方面的东西,就花一段时间学了下这方面的API,在此总结一 ...

  9. 框架基础:ajax设计方案(六)--- 全局配置、请求格式拓展和优化、请求二进制类型、浏览器错误搜集以及npm打包发布

    距离上一次博客大概好多好多时间了,感觉再不搞点东西出来,感觉就废了的感觉.这段时间回老家学习驾照,修养,然后7月底来上海求职(面了4家,拿了3家office),然后入职同程旅游,项目赶进度等等一系列的 ...

随机推荐

  1. Google Projectsheet Planning 插件的WBS

    生成 WBS的序列號 在 Sldebar中的 "WBS" 按鈕: "< WBS" 取消下級目錄 "WBS >" 生成下級目錄 G ...

  2. 剑指Offer-16:合并两个有序链表

    题目描述: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 例如A链表为1-3-5-7,B链表为2-4-6-8.所以合并后的新链表C为1-2-3-4-5- ...

  3. 概率dp——逆推期望+循环迭代zoj3329

    首先要推出dp[i]的期望方程,会发现每一项都和dp[0]相关, 那我们将dp[i]设为和dp[0]有关的式子dp[i]=a[i]*dp[0]+b[i],然后再回代到原来的期望方程里 然后进行整理,可 ...

  4. 将文件大小数值转换成B、KB、MB、GB

    //delphi 将文件大小数值转换成B/KB/MB/GB function FormatByteSize(const bytes: Longint): string; const B = 1; // ...

  5. bzoj 1196: [HNOI2006]公路修建问题(二分+贪心)

    传送门 解题思路 看到最大,肯定要先想二分答案.二分之后首先从小到大枚举\(k\)个小于\(lim\)的所有一级公路,然后用并查集连到一起,然后就在剩下的里面从小到大找n-1-k个二级公路,模仿最小生 ...

  6. python用类实现装饰器

    一.代码 #利用__call__方法,装饰器的执行流程:当添加装饰器语法糖时,会把语法糖的变量名加()执行,并将被装饰的函数名传入.所以当类加()执行时,执行了__init__,产生的对象就是被装饰的 ...

  7. Seam科普

    声明:这是引用的,具体引用位置在最下面. 只供个人学习,免得忘记了又要到处找,十分感谢原作作者.如果有什么问题请联系我. Seam框架开发一个HelloWrld的例子. Seam本身,而在于Seam使 ...

  8. 02-python 学习第二天

    今天学习了以下几个方面的内容,虽然部分内容不能理解,跟着老师写出了代码. 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 程序练习1:购物车程序 请闭眼写出以下程序. 程序: ...

  9. <数据可视化>Matplotlib(2D+3D)

    1.Matplotlib介绍(2D) Matplotlib 是 Python 2D-绘图领域使用最广泛的套件.它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式. pylab 是 matplo ...

  10. 实现ViewPager的联动效果

    参考链接:android - Synchronizing two ViewPagers using OnPageChangeListener - Stack Overflow 其中有个非常完美的解决方 ...