题意:

     给你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能产生的价值。

  1. #include<stdio.h>
  2. #include<string.h>
  3.  
  4. #define N 1005

  5. __int64 C[N][N];
  6. __int64 A[40] ,B[40];
  7. __int64 mod = 1000003;
  8. void DB_C()
  9. {
  10. C[0][0] = C[1][0] = C[1][1] = B[1] = 1;
  11. for(int i = 2 ;i <= 35 ;i ++)
  12. B[i] = B[i-1] * 2 % mod;
  13. for(int i = 2 ;i <= 1002 ;i ++)
  14. {
  15. C[i][0] = 1;
  16. for(int j = 1 ;j <= i ;j ++)
  17. C[i][j] = (C[i-1][j] + C[i-1][j-1]) % mod;
  18. }
  19. return ;
  20. }
  21. int main ()
  22. {
  23. int n ,i ,j ,k ,num;
  24. DB_C();
  25. while(~scanf("%d" ,&n))
  26. {
  27. memset(A ,0 ,sizeof(A));
  28. for(i = 1 ;i <= n ;i ++)
  29. {
  30. scanf("%d" ,&num);
  31. int tt = 0;
  32. while(num)
  33. {
  34. A[++tt] += (num&1);
  35. num /= 2;
  36. }
  37. }
  38. for(i = 1 ;i <= n ;i ++)
  39. {
  40. __int64 ans = 0;
  41. for(j = 1 ;j <= 32 ;j ++)
  42. {
  43. for(k = 1 ;k <= A[j] && k <= i ;k += 2)
  44. {
  45. if(i - k > n - A[j]) continue;
  46. __int64 tmp = C[A[j]][k] * C[n - A[j]][i - k] % mod;
  47. ans = (ans + tmp * B[j]) % mod;
  48. }
  49. }
  50. if(i == 1) printf("%I64d" ,ans);
  51. else printf(" %I64d" ,ans);
  52. }
  53. printf("\n");
  54. }
  55. return 0;
  56. }

hdu4810的更多相关文章

  1. hdu-4810 Wall Painting(组合数学)

    题目链接: Wall Painting Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  2. HDU-4810-wall Painting(二进制, 组合数)

    链接: https://vjudge.net/problem/HDU-4810 题意: Ms.Fang loves painting very much. She paints GFW(Great F ...

随机推荐

  1. Nginx常用内核参数优化,安装,基本命令

    1.内核参数配置,默认的Linux内核参数考虑的是通用的场景,明显不符合用于支持高并发访问web服务的定义,所以需要修改Linux内核参数,使得Nginx可以拥有更高的性能.可以通过修改 /etc/s ...

  2. OpenGL光照贴图

    一:啥叫贴图 上一节中,我们将整个物体的材质定义为一个整体,但现实世界中的物体通常并不只包含有一种材质,而是由多种材质所组成. 拓展之前的系统,引入漫反射和镜面光贴图(Map).这允许我们对物体的漫反 ...

  3. pip命令安装python包到指定目录

    pip install wxpython --target=D:\Server\Python38\Lib\site-packages

  4. Linux速通07 硬盘分区、格式化及文件系统管理

    硬件设备与文件名的对应关系 # 在Linux系统中,每个设备都被当作一个文件来对待 # 各种设备在Linux中的文件名 设备 设备在Linux内的文件名 IDE硬盘 /dev/hd[a-d] SCSI ...

  5. mongodb 聚合(aggregate)

      MongoDB中文手册|官方文档中文版 https://docs.mongoing.com/ 聚合操作处理数据记录和 return 计算结果.聚合操作将来自多个文档的值组合在一起,并且可以对分组数 ...

  6. Spring Boot 自动装配原理

    Spring Boot 自动装配原理 Spring Boot 在启动之前还有一系列的准备工作,比如:推断 web 应用类型,设置初始化器,设置监听器,启动各种监听器,准备环境,创建 applicati ...

  7. MySQL的安装及使用

    安装MySQL 这里建议大家使用压缩版,安装快,方便.不复杂. 1.MySQL软件下载 mysql5.7 64位下载地址: https://dev.mysql.com/get/Downloads/My ...

  8. Elasticsearch扩展X-pack实施流程-实施

    Elasticsearch扩展X-PACK实施流程 elasticsearch5.2.1安装X-PACK,对ES集群进行监控,报警,安全验证,报告,图形化操作 注意 版本号需要固定,小版本都不能差,要 ...

  9. 源码篇:Handler那些事

    前言 Handler属于八股文中非常经典的一个考题了,导致这个知识点很多时候,考官都懒得问了:这玩意很久之前就看过,但是过了一段时间,就很容易忘记,但是处理内存泄漏,aidlHandler之类的考点答 ...

  10. @PostConstruct 使用记录

    @PostConstruct 从Java EE5规范开始,Servlet增加了两个影响Servlet生命周期的注解(Annotation):@PostConstruct和@PreConstruct.这 ...