Cube Or 北方大学生训练赛

Cube Or

Time Limit: 2000/2000 MS(Java/Others)    Memory Limit: 262144/262144 K(Java/Others)

 

Problem Description :                                                          

Given you N Integers ai (1≤i≤N) , you can do thefollowing operation: pick out one integer, write down the value on a paper,then put this integer back . After you’ve done this operation three times, you dobitwise operation OR to all the three number you have picked. Now you need toanswer q queries. For the ith query, you know the final answer ansi after OR operation. And you need to find how many different ways you cando to get ansi. Two ways are different if in some operation, one way you pick up ai andthe other way you pick up aj and i ≠ j.

 

Input:

The first line contains 2integers, N (1≤N≤300000) and q (1≤q≤300000) .

The second line contains Nintegers. The ith (1≤i≤N) integer represents ai (0≤ai≤1e6).

The third line contain qintegers. The ith (1≤i≤N) integer represents ansi (0≤ansi≤1e6).

 

 

Output:

Output q integers, the ith corresponds to the number of different waysof the ith query.

 

 

Sample Input:

10 3

3 3 3 4 5 6 7 8 9 10

3 7 15

 

Sample Output:

27 301 378

 

Hint:

There’re 103 = 1000 different of ways topick in total.

For the first query, only choosing from the first 3number can get final answer of 3. So the number of ways to get 3 is 33 =27.


题解:我们将输入的所有数按照其值为下标,统计其出现的次数。要取3个数进行位或,得到q,目标就是求取数的方案数。

样例q = 3的时候,只能取前3个数进行or操作才能得到,由于取出以后可以放回,因此共有3*3*3 = 27种可能。

我们可以这样考虑举个例子,对于要or到(111)2 的情况,我们先统计(111)2的所有子集出现次数的和(这里x子集y的定义就是在x的二进制位取0的情况下y相应的二进制位也必须为0)

那么(111)2的子集有(000)2 ,(001)2,(010)2,(011)2,(100)2,(101)2,(110)2,(111)2 ,那么他们子集出现次数的和为(011)2:3次 ;(100)2:1次;(101)2:1次;(110)2:1次,(111)2:1次,共6次,因此我们定义计算7*7*7 = 343为(111)2的毛方案数,然后我们再从343中减去不满足的情况就好了,那么不满足的情况有什么呢?

不满足的情况就是(111)2的子集 的毛方案数。也就是说(000)2的毛方案数为0;(001)2的毛方案数为0;(010)2的毛方案数为0;(011)2的毛方案数为27,;(100)2的毛方案数为1;(101)2的毛方案数为8;(110)2的毛方案数为8;然后(111)2的净方案数为343-27-1-8-8 = 301这就是第2个样例的计算方案。

因此我们定义动态规划的最优子结构。dp[i][j]表示数字j仅考虑后i位数字时的统计值

转移方程dp[i][j] = dp[i-1][j] + dp[i-1][j^(1<<(i-1))],前提:j & (1<<(i-1)) != 0 否则的话 直接有 dp[i][j] = dp[i-1][j]

因为dp[i]仅与dp[i-1]有关并且 对于一个确定的i, j^(1<<(i-1))与j不会同时出现,这就保证了我可以减少一维数组,节省空间,并且不会有后效性。

即直接定义dp[j]作为数字j仅考虑后i为数字时的统计值。

求完统计值以后,直接对统计值进行求立方,就可以得到毛方案数了。后面的处理自己看代码吧。代码很简练,我的题解是通过反推南开提供的标准答案得到的。

附上南开大学提供的标准答案:

#include <bits/stdc++.h>using namespace std;typedef long long ll;ll stat[1 << 20];
int n, q;int main() {ios_base::sync_with_stdio(0);for(int I=1;I<=20;I++){memset(stat,0,sizeof(stat));char iName[100],oName[100];sprintf(iName,"data/%d.in",I);sprintf(oName,"data/%d.out",I);freopen(iName,"r",stdin);freopen(oName,"w",stdout);scanf("%d%d", &n, &q);for(int i = 0; i < n; i++) {int num;scanf("%d", &num);stat[num]++;}for(int i = 0; i < 20; i++) {for(int j = 0; j < 1 << 20; j++) if(j & (1 << i)) {stat[j] += stat[j ^ (1 << i)];}}for(int i = 0; i < 1 << 20; i++) {stat[i] = stat[i] * stat[i] * stat[i];}for(int i = 0; i < 20; i++) {for(int j = 0; j < 1 << 20; j++) if(j & (1 << i)) {stat[j] -= stat[j ^ (1 << i)];}}for(int i = 0; i < q; i++) {int num;scanf("%d", &num);cout << stat[num];if(i != q - 1)cout << ' ';}cout << endl;
}return 0;
}
/*
10 3
3 3 3 4 5 6 7 8 9 10
3 7 15
*/




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

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

相关文章

牛客-沙漠点列【tarjan】

正题 题目链接:https://ac.nowcoder.com/acm/contest/1101#question 题目大意 nnn个点mmm条边的沙漠(所有联通子图都是仙人掌)&#xff0c;删除kkk个点使得剩下的连通块最多。 解题思路 对于图上的每条割边&#xff0c;删去之后就可以多出一个联通块&#xff0c;所以我们就可…

来自后端的突袭? --开包即食的教程带你浅尝最新开源的C# Web引擎 Blazor

在今年年初, 恰逢新春佳节临近的时候. 微软给全球的C#开发者们, 着实的送上了一分惊喜. 微软正式开源Blazor &#xff0c;将.NET带回到浏览器.这个小惊喜, 迅速的在dotnet开发者中间传开了. 而就在昨天(2018年3月22日) Blazor发布了它的第一次Release. Blazor到底是个什么样的东…

博客文章列表(二)——算法、数据结构、数据库、ABCD

七、编程基础 数据结构 详情列表 算法 详情列表 算法.排序 详情列表 算法.加密 详情列…

A*B NTT快速数论变换

wmq的AB Problem 发布时间: 2017年4月9日 17:06 最后更新: 2017年4月9日 17:07 时间限制: 3000ms 内存限制: 512M 描述 这是一个非常简单的问题。 wmq如今开始学习乘法了&#xff01;他为了训练自己的乘法计算能力&#xff0c;写出了n个整数&#xff0c;并且对每两个数a,…

51nod-猴猴吃苹果【线段树】

正题 题目链接:https://www.51nod.com/Contest/ProblemList.html#contestId188&randomCode291765 题目大意 nnn个点的一棵树&#xff0c;从kkk节点出发&#xff0c;每次走到最远的一个节点(路上点最多,如果有多个就编号最小的)并将路上的点权变为0&#xff0c;求会依次到达…

北方大学 ACM 多校训练赛 第十五场 蜘蛛牌A

题目描述 XCX最近迷上了玩蜘蛛牌。蜘蛛牌是windowsxp操作系统自带的一款纸牌游戏&#xff0c;游戏规则是这样的&#xff1a;只能将牌拖到比它大一的牌上面&#xff08;A最小&#xff0c;K最大&#xff09;&#xff0c;如果拖动的牌上有按顺序排好的牌时&#xff0c;那么这些牌也…

dotnet watch+vs code提升asp.net core开发效率

在园子中&#xff0c;已经又前辈介绍过dotnet watch的用法&#xff0c;但是是基于asp.net core 1.0的较老版本来讲解的&#xff0c;在asp.net core 2.0的今天&#xff0c;部分用法已经不太一样&#xff0c;所以就再写一篇文章来介绍dotnet watch vs code来提升asp.net core开发…

51nod-猴猴吃香蕉【dp】

正题 题目链接:https://www.51nod.com/Contest/Problem.html#contestProblemId1149 题目大意 nnn个数&#xff0c;求有多少种选择方案使选择的数乘机为kkk。 解题思路 显然kkk的质因数最多只有999个&#xff0c;我们将质因数进行dpdpdp。若选择的数的质因数刚好是kkk的质因数…

北方大学 ACM 多校训练赛 第十五场 数字游戏

本题的意思是&#xff0c;给你1/2&#xff0c;1/2&#xff0c;1&#xff0c;2&#xff0c;4……2^&#xff08;k-1&#xff09; &#xff0c;让你在左边的数列中添加号或者-号&#xff0c;使得最终的答案为n即可。 思路&#xff1a; 我们知道上面这些数直接如果全部都填号的话…

ASP.NET Core + Docker + Jenkins + gogs + CentOS 从零开始搭建持续集成

没有采用gitlab&#xff0c;因为gitlab比较吃配置。也比较重&#xff0c;用不到那么多功能。采用go语言开发的gogs来代替。免费HTTPS证书安装Gogs (一个gitserver&#xff0c;类似于gitlab)安装DockerDocker配置加速器 一定要配置&#xff0c;用官方的源会让你体会到什么叫做绝…

51nod-猴猴的比赛【莫队,线段树】

正题 题目链接:https://www.51nod.com/Contest/Problem.html#contestProblemId1150 题目大意 给出两颗nnn个点的树&#xff0c;求有多少个点(i,j)(i,j)(i,j)对使得在两棵树中iii都是jjj的祖先。 解题思路 在dfsdfsdfs序中一个节点的孩子是在一个连续的区间中的。所以对于第一…

北方大学 ACM 多校训练赛 第十五场 买花

显然是一个比较简单的离线查询问题。 本质上是对区间求集合的问题&#xff0c;按照区间右端点从小到大对区间进行排序&#xff0c;然后用一个指针curr表示当前正在考虑区间的最右侧位置&#xff0c;针对排好序区间[tarl,tarr]&#xff0c;先查看curr是否到达tarr&#xff0c;如…

使用CoreRT将.NET Core发布为Native应用程序

在上一篇文章《使用.NET Core快速开发一个较正规的命令行应用程序》中我们看到了使用自包含方式发布的.NET Core应用中包含了216个文件。我就写一个cat命令用得着这么动真格。。。这写出来的命令行还有人用吗&#xff1f;今天我们就来介绍一下MS的另一个开源项目CoreRT。用来解…

P4343-[SHOI2015]自动刷题机【二分答案】

正题 题目链接:https://www.luogu.org/problem/P4343 题目大意 nnn个操作每个操作加几行代码或减几行代码&#xff0c;若代码积累到xxx行就自动删除所有代码并切掉一道题。 已知道切掉了kkk题&#xff0c;求最大和最小的xxx 解题思路 因为xxx和切题的数量单调&#xff0c;所…

北方大学 ACM 多校训练赛 第十五场 欢度6.18

把式子变成a[i]1 p(a[i-1]1)q[a[i-2]1]&#xff0c;矩阵快速幂搞定。复杂度o(logn) #include <iostream> #include <cstdio> using namespace std; #define int long long int x,y,p,q,n; const int MOD 1000000007;int fast_mod(int n) // 求 (t^n)%MOD {i…

.NET Core 2.1预览版首次引入Global Tools

Global Tools是.NET Core 2.1预览版中其中一个初次出现的特性。Global Tools提供了一种方法&#xff0c;让开发人员编写的.NET Core应用可以打包成NuGet包交付。如果.NET Core运行在目标平台上&#xff0c;那么一个恰当打包的Global Tool就可以在那上面运行。JavaScript开发人员…

P5253-丢番图【数论】

正题 题目链接:https://www.luogu.org/problem/P5253 题目大意 给一个nnn&#xff0c;求有多少对x,y(x≤y)x,y(x\leq y)x,y(x≤y)使得 1x1y1n\frac{1}{x}\frac{1}{y}\frac{1}{n}x1​y1​n1​ 解题思路 xyxy1n\frac{xy}{xy}\frac{1}{n}xyxy​n1​ n(xy)xyn(xy)xyn(xy)xy xy−n…

最小费用购物问题

西安交大 软件53 蔡少斐 题号&#xff1a;3_14 题目叙述&#xff1a; 某商店中每种商品都有一个价格。例如&#xff0c;一朵花的价格是2 ICU(ICU 是信息学竞赛的货币的单位&#xff09;;一个花瓶的价格是5 ICU。为了吸引更多的顾客&#xff0c;商店提供了特殊优惠价。 特殊优…

开源服务容错处理库Polly使用文档

在进入SOA之后&#xff0c;我们的代码从本地方法调用变成了跨机器的通信。任何一个新技术的引入都会为我们解决特定的问题&#xff0c;都会带来一些新的问题。比如网络故障、依赖服务崩溃、超时、服务器内存与CPU等其它问题。正是因为这些问题无法避免&#xff0c;所以我们在进…

P2638-安全系统【数论,组合数学】

正题 题目链接:https://www.luogu.org/problem/P2638 题目大意 aaa个不同的000&#xff0c;bbb个不同的111。nnn个位置每个可以放0,10,10,1可以都放也可以不放也可以只放一个。然后求方案数。 解题思路 答案就是(∑i0aCni∗Cai)∗(∑i0bCni∗Cbi)(\sum_{i0}^a C_{n}^{i}*C_{a…