hdu4810
题意:
给你n个数,让你输出n个数,没一次输出的是在这n个数里面取i个数异或的和(所有情况<C n中取i>)。
思路:
首先把所有的数都拆成二进制,然后把他们在某一位上的数字加起来,比如 3 = 11 5 = 101 他俩合并就是 112 就这样吧所有的数都合并了,一共最多32位,然后我们考虑,对于每一位,只有选择奇数个1的时候才会是1,否则就是0 ,所以我们可以一次枚举每一位,比如当前要取6个数,对于第三位有8个1,那么当前的这位就是
C[8][1] * C[N-8][6-1] * 2^3
+ C[8][3] * C[N-8][6-3] * 2^3
+ C[8][5] * C[N-8][6-5] * 2^3
其中变化的那个1 3 5 就是去奇数的情况,每一次取完奇数后乘以剩下的的(6 - 奇数)的情况就是一共有多上中取当前奇数的情况 然后在乘以对应位上产生的数 2^3加在一起就是当要求取6个的时候在第三位上的8个1能产生的价值。
#include<stdio.h>
#include<string.h> #define N 1005
__int64 C[N][N];
__int64 A[40] ,B[40];
__int64 mod = 1000003; void DB_C()
{
C[0][0] = C[1][0] = C[1][1] = B[1] = 1;
for(int i = 2 ;i <= 35 ;i ++)
B[i] = B[i-1] * 2 % mod;
for(int i = 2 ;i <= 1002 ;i ++)
{
C[i][0] = 1;
for(int j = 1 ;j <= i ;j ++)
C[i][j] = (C[i-1][j] + C[i-1][j-1]) % mod;
}
return ;
} int main ()
{
int n ,i ,j ,k ,num;
DB_C();
while(~scanf("%d" ,&n))
{
memset(A ,0 ,sizeof(A));
for(i = 1 ;i <= n ;i ++)
{
scanf("%d" ,&num);
int tt = 0;
while(num)
{
A[++tt] += (num&1);
num /= 2;
}
}
for(i = 1 ;i <= n ;i ++)
{
__int64 ans = 0;
for(j = 1 ;j <= 32 ;j ++)
{
for(k = 1 ;k <= A[j] && k <= i ;k += 2)
{
if(i - k > n - A[j]) continue;
__int64 tmp = C[A[j]][k] * C[n - A[j]][i - k] % mod;
ans = (ans + tmp * B[j]) % mod;
}
}
if(i == 1) printf("%I64d" ,ans);
else printf(" %I64d" ,ans);
}
printf("\n");
}
return 0;
}
hdu4810的更多相关文章
- hdu-4810 Wall Painting(组合数学)
题目链接: Wall Painting Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- HDU-4810-wall Painting(二进制, 组合数)
链接: https://vjudge.net/problem/HDU-4810 题意: Ms.Fang loves painting very much. She paints GFW(Great F ...
随机推荐
- Arrays.Sort()中的那些排序算法
本文基于JDK 1.8.0_211撰写,基于java.util.Arrays.sort()方法浅谈目前Java所用到的排序算法,仅个人见解和笔记,若有问题欢迎指证,着重介绍其中的TimSort排序,其 ...
- DatePicker 多时间粒度选择器组件
使用方法: 在.vue文件引入 import ruiDatePicker from '@/components/rattenking-dtpicker/rattenking-dtpicker.vue' ...
- 【Azure 服务总线】Azure Service Bus中私信(DLQ - Dead Letter Queue)如何快速清理
在博文ServiceBus 队列中死信(DLQ - Dead Letter Queue)问题一文中,介绍了服务总线产生私信的原因及可以通过代码的方式来清楚私信队列中的消息,避免长期占用空间(因为私信中 ...
- 【Android笔记】Thread类中关于join()方法的源码分析
1.join()方法的作用: 例如有一个线程对象为Thread1,在main()方法中调用Thread1.join()方法可使得当前线程(即主线程)阻塞,而执行Thread1线程. 2.源码分析(以上 ...
- 清华大学-成绩排序(排序+解决MLE问题)
成绩排序 成绩排序 这里需要注意的就是超内存的问题. 解决方法就是通过指针的方式,每次动态开n大小的内存,而不是一开始就分配. #include<bits/stdc++.h> using ...
- 订单和产品的多对多表关系在crudapi系统零代码实现
表关系管理 在上一篇序列号管理中,产品和销售订单都是孤立的单表,本文通过crudapi中表关系(relation)管理将多个表连接起来,形成一个整体. 概要 关系类型 表与表之间的关系(relatio ...
- BurpSuite 一些小技巧
拦截请求 设置不拦截下面的网站(记得保存项目,不然每次都要添加) .*\.?baidu.com|.*\.?google.com|.*\.?bcebos.com|.*\.?bdstatic.com|.* ...
- Windows系统添加虚拟串口及CanToolApp功能1的实现
项目开始尝试用com0com添加虚拟串口,但是遇到了问题,系统中可以看到添加的虚拟串口,但是用C#无法获取串口.经过多次尝试后,决定换用Virtual Serial Port Driver添加虚拟串口 ...
- 多线程之volative关键字
目录 轻量级同步机制:volative关键字 volative的作用 volatile非原子特性 volatile与synchronized比较 常用原子类进行自增自减操作 CAS 使用CAS原理实现 ...
- python类属性
类属性 类属性分为共有属性和私有属性. 私有属性的定义方法eg:__age(若无次定义则默认为公有属性) 类属性举例: class people: name = "china" _ ...