【题解】与查询 [51nod1406]
【题解】与查询 [51nod1406]
【题目描述】
给出 \(n\) 个整数,对于 \(x \in [0,1000000]\),分别求出在这 \(n\) 个整数当中同 \(x\) 求与之后结果为 \(x\) 的有多少个。
【样例】
样例输入:
3
2 3 3
样例输出:
3
2
3
2
0
0
...
...
...
0
(一共1000001个数,后面一共999997个0)
【数据范围】
\(100\%\) \(1 \leqslant N \leqslant 10^6,\) \(1 \leqslant a[i] \leqslant 10^6\)
【分析】
用 \(dp[i]\) 表示与 \(i\) 求与等于 \(i\) 的数的个数。
首先,一个数同它自己求与还是等于它自己,所以对于,\(dp[i]\) 的初始值就是给出的序列中 \(i\) 出现的次数。
对于某一个二进制数 \(a\),将其任意一个为 \(0\) 的位变为 \(1\) ,得到二进制数 \(b\)。
可知:
同 \(a\) 求与等于 \(a\) 的数同 \(b\) 求与不一定等于 \(b\),
同 \(b\) 求与等于 \(b\) 的数同 \(a\) 求与一定等于 \(a\)。
即 \(b\) 的方案一定可以满足 \(a\) 的需求。
所以 \(dp\) 方程为:\(dp[j]+=dp[j \oplus (1<<i)]\),其中 \(j \in [0,10^6],\) \(j\) \(\And (1<<i)==0\) 且 \(j \oplus (1<<i) \leqslant 10^6\)
由于数据输出过多,需要自己写快输,否则会全 \(TLE\) 。
时间复杂度为 \(O(MlogM)\),其中 \(M=10^6\) 。
【Code】
#include<algorithm>
#include<cstdio>
#define Re register int
const int N=1e6;
int n,a,dp[N+3];
inline void in(Re &x){
int f=0;x=0;char c=getchar();
while(c<'0'||c>'9')f|=c=='-',c=getchar();
while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+(c^48),c=getchar();
x=f?-x:x;
}
inline void out(int x){
if(x>9)out(x/10);
putchar(x%10+'0');
}
int main(){
in(n);
for(Re i=1;i<=n;i++)in(a),++dp[a];
for(Re i=0;i<20;i++)
for(Re j=0;j<=N;++j)
if(!(j&(1<<i))&&(j^(1<<i))<=N)dp[j]+=dp[j^(1<<i)];
for(Re j=0;j<=N;++j)out(dp[j]),puts("");
}
【题解】与查询 [51nod1406]的更多相关文章
- MySQL之单表查询练习
一.emp表 二.练习 1. 查询出部门编号为30的所有员工2. 所有销售员的姓名.编号和部门编号.3. 找出奖金高于工资的员工.4. 找出奖金高于工资60%的员工.5. 找出部门编号为10中所有经理 ...
- 【BZOJ】3309: DZY Loves Math
题意 \(T(T \le 10000)\)次询问,每次给出\(a, b(1 \le a, b \le 10^7)\),求 \[\sum_{i=1}^{a} \sum_{j=1}^{b} f((i, j ...
- 【洛谷P3792】由乃与大母神原型和偶像崇拜
题目大意:维护一个序列,支持单点修改和查询一段区间能不能组成连续的一段数. 题解:查询区间能不能组成一段连续的数这个操作较为复杂,很难在较小时间复杂度内直接维护.这里采用线段树维护区间哈希的策略,即: ...
- codeforces 1000F One Occurrence(线段树、想法)
codeforces 1000F One Occurrence 题意 多次询问lr之间只出现过一次的数是多少. 题解 将查询按照左端点排序,对于所有值维护它在当前位置后面第二次出现是什么时候,那么查询 ...
- Croc Champ 2013 - Round 1 E. Copying Data 线段树
题目链接: http://codeforces.com/problemset/problem/292/E E. Copying Data time limit per test2 secondsmem ...
- POJ2104 K-th Number —— 区间第k小 整体二分
题目链接:https://vjudge.net/problem/POJ-2104 K-th Number Time Limit: 20000MS Memory Limit: 65536K Tota ...
- [Leetcode]Sql系列3
题目1 产品数据表: Products +---------------+---------+ | Column Name | Type | +---------------+---------+ | ...
- 51nod1406 与查询
这题卡I/O...dp一下... #include<cstdio> #include<cstring> #include<cctype> #include<a ...
- 树套树专题——bzoj 3110: [Zjoi2013] K大数查询 & 3236 [Ahoi2013] 作业 题解
[原题1] 3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec Memory Limit: 512 MB Submit: 978 Solved: 476 Descri ...
随机推荐
- JS引擎是如何工作的?从调用堆栈到Promise
摘要: 理解 JS 引擎运行原理. 作者:前端小智 原文:JS引擎:它们是如何工作的?从调用堆栈到Promise,需要知道的所有内容 Fundebug经授权转载,版权归原作者所有. 为了保证可读性,本 ...
- OpenLDAP 安装教程
OpenLDAP 安装教程 本文原始地址:https://sitoi.cn/posts/48217.html 在centos7上安装OpenLDAP 环境准备 两台虚拟机 node01 IP:192. ...
- Python3和HTMLTestRunner生成html测试报告
1.测试环境: Python3.5+unittest+HTMLTestRunner 2.下载HTMLTestRunner.py文件 下载地址 http://tungwaiyip.info/softwa ...
- Nginx下HTML页面POST请求静态JSON数据返回405状态
在浏览器访问HTML页面,发现一些静态JSON数据没有显示,F12查看,如下图所示: 可以看到请求方式为POST 将请求链接复制在浏览器地址栏访问,可以正常请求到数据 F12查看,可以看到请求方式为G ...
- Navicat Premium 12 永久使用办法
1.按步骤安装Navicat Premium,如果没有可以去官网下载:http://www.navicat.com.cn/download/navicat-premium 2.安装好后下载激活文件:h ...
- 201871010110 - 李华 《面向对象程序设计(java)》第二周学习总结
第一部分:理论知识学习部分 一.简单的Java程序应运程序 1.标识符0标识符由字母.下划线.美元符号和数字组成,且第一个符号不能为数字. 标识符可用作:类名.对象名.变量名.方法名.数组名.文件 ...
- Kubernetes部署Spring Boot应用
SpringBoot项目 新建springboot项目 @RestController public class HelloWorldController { @RequestMapping(&quo ...
- vue-cli3和ts建立vue项目
第一步,如果你之前没有装vuecli,可以直接执行下面命令 npm install --global @vue/cli 注:这里我install 的时候不成,于是我用的是 cnpm install - ...
- 有关OutputDebugString的一点儿事实
我最近花了一些时间分析OutputDebugString方法.在我的另一个实验中,我需要一个仅依赖于本机API的OutputDebugString版本.在实现它的过程中,我发现了一些关于OutputD ...
- String数组转int数组
假设我们有一个字符串数组: String[] strings = {"1", "2", "3"}; 使用Lambda表达式(自Java 8起 ...