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. Apocalypse Someday

    Apocalypse Someday 定义一个数是合法的,当且仅当中间出现至少一个连续的大于三个的6,求第x个合法的数,\(x\leq 50,000,000\) 解 首先,注意到求第几个,即想到试填法 ...

  2. 树莓派3b+ 实现视频监控

    设备:树莓派3B+.Raspberry Pi Camera sudo raspi-config #启动camera sudo reboot #监测摄像头是否安装成功 raspistill -o ima ...

  3. php curl的正确使用方法

    在做一个读取远程抓取数据并显示的demo的时候,遇到了以下几个问题: 1.用的curl变量进行了多定义 2.抓取远程数据时没有返回正确的json数据 没有返回正确的json数据不是因为网站提供的接口问 ...

  4. golang中net/http包的简单使用

    一.介绍 http包提供了http客户端和服务端的实现 Get,Head,Post和PostForm函数发出http.https的请求 程序在使用完回复后必须关闭回复的主体 #简单的访问网站,由于没有 ...

  5. "一个实用的却被忽略的命名空间:Microsoft.VisualBasic":

        当你看到这个命名空间的时候,别因为是vb的东西就匆忙关掉网页,那将会是您的损失,此命名空间中的资源最初目的是为了简化vb.net开发而创建的,所以microsoft.visualbasic并不 ...

  6. ps快速将白底图片变为透明图片

    方法一: 如果图层有锁图标,则要点击它,然它消失.然后选中魔棒工具,然后点击图片上要透明的区域,按下backspace键即可. 方法二: 转载自:https://blog.csdn.net/sunyi ...

  7. java关键字之instanceof

    首先来看段测试代码 public class TestInstanceof{ public static void main(String[] args){ int a = 1; if(a insta ...

  8. [WPF自定义控件库]使用WindowChrome自定义RibbonWindow

    原文:[WPF自定义控件库]使用WindowChrome自定义RibbonWindow 1. 为什么要自定义RibbonWindow 自定义Window有可能是设计或功能上的要求,可以是非必要的,而自 ...

  9. JS规则 保持先后顺序(操作符优先级)操作符之间的优先级(高到低): 算术操作符 → 比较操作符 → 逻辑操作符 → "="赋值符号

    保持先后顺序(操作符优先级) 我们都知道,除法.乘法等操作符的优先级比加法和减法高,例如: var numa=3; var numb=6 jq= numa + 30 / 2 - numb * 3; / ...

  10. Johnson–Lindenstrauss 定理-Johnson–Lindenstrauss lemma

    Johnson–Lindenstrauss 定理是这样的:一个一百万维空间里的随便一万个点,一定可以几乎被装进一个几十维的子空间里! 严格说来是这样:在 M 维空间中的 N 个点,几乎总是被包含在一个 ...