题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3434

题意:

思路:

  1. const int mod=10007;
  2. const int N=100005;
  3.  
  4. int g[22][N];
  5. int C[N][22],mou[N];
  6. int h[22][N][13];
  7.  
  8. int prime[N],cnt;
  9. int tag[N];
  10.  
  11. void init()
  12. {
  13. int i,j;
  14.  
  15. mou[1]=1;
  16. for(i=2;i<N;i++)
  17. {
  18. if(!tag[i])
  19. {
  20. prime[cnt++]=i;
  21. mou[i]=-1;
  22. }
  23. for(j=0;j<cnt;j++)
  24. {
  25. if(i*prime[j]>=N) break;
  26. tag[i*prime[j]]=1;
  27. if(i%prime[j]==0)
  28. {
  29. mou[i*prime[j]]=0;
  30. break;
  31. }
  32. else mou[i*prime[j]]=-mou[i];
  33. }
  34. }
  35.  
  36. C[0][0]=1;
  37. for(i=1;i<N;i++)
  38. {
  39. C[i][0]=1;
  40. for(j=1;j<=i&&j<=20;j++)
  41. {
  42. C[i][j]=C[i-1][j-1]+C[i-1][j];
  43. if(C[i][j]>=mod) C[i][j]-=mod;
  44. }
  45. }
  46. int c;
  47. for(c=2;c<=20;c++)
  48. {
  49. for(i=1;i<N;i++) for(j=i;j<N;j+=i)
  50. {
  51. g[c][j]+=C[i-1][c-2]*mou[j/i];
  52. if(g[c][j]>=mod) g[c][j]-=mod;
  53. if(g[c][j]<0) g[c][j]+=mod;
  54. }
  55. }
  56.  
  57. for(c=2;c<=20;c++)
  58. {
  59. for(i=1;i<N;i++)
  60. {
  61. int pre=1;
  62. int x=i;
  63. if(x>=mod) x%=mod;
  64. for(j=0;j<=11;j++)
  65. {
  66. h[c][i][j]=pre*g[c][i]%mod;
  67. h[c][i][j]+=h[c][i-1][j];
  68. if(h[c][i][j]>=mod) h[c][i][j]-=mod;
  69. pre=pre*x%mod;
  70. }
  71. }
  72. }
  73. }
  74.  
  75. int n,cc,M[13];
  76.  
  77. struct node
  78. {
  79. int a[15];
  80.  
  81. int Max;
  82.  
  83. void clear()
  84. {
  85. clr(a,0);
  86. Max=0;
  87. }
  88.  
  89. void mul(int x1,int x0)
  90. {
  91. int i;
  92. int b[15];
  93. for(i=0;i<=Max;i++) b[i]=a[i]*x0%mod;
  94. b[Max+1]=0;
  95.  
  96. for(i=0;i<=Max;i++)
  97. {
  98. b[i+1]=b[i+1]+a[i]*x1%mod;
  99. if(b[i+1]>=mod) b[i+1]-=mod;
  100. }
  101.  
  102. for(i=0;i<=n;i++) a[i]=b[i];
  103. Max++;
  104. }
  105.  
  106. }A;
  107.  
  108. int cal(int d1,int d2)
  109. {
  110. A.clear();
  111. A.a[0]=1;
  112. int i;
  113. for(i=1;i<=n;i++)
  114. {
  115. i64 tmp=M[i]/d1;
  116. int aa=-(i64)(tmp+1)*tmp/2%mod;
  117. int bb=M[i]%mod*tmp%mod;
  118. A.mul(aa,bb);
  119. }
  120. int ans=0;
  121. for(i=n;i>=0;i--)
  122. {
  123. ans+=A.a[i]*(h[cc][d2][i]-h[cc][d1-1][i])%mod;
  124. if(ans<0) ans+=mod;
  125. if(ans>=mod) ans-=mod;
  126. }
  127. return ans;
  128. }
  129.  
  130. int main()
  131. {
  132. init();
  133.  
  134. int T=getInt();
  135.  
  136. while(T--)
  137. {
  138. n=getInt();
  139. cc=getInt();
  140. int i;
  141. for(i=1;i<=n;i++) M[i]=getInt();
  142. sort(M+1,M+n+1);
  143. int ans=0;
  144.  
  145. for(i=1;i<=M[1];)
  146. {
  147. int L=i;
  148. int R=M[1];
  149.  
  150. int j;
  151. for(j=1;j<=n;j++)
  152. {
  153. R=min(R,M[j]/(M[j]/i));
  154. }
  155.  
  156. ans+=cal(L,R);
  157.  
  158. if(ans>=mod) ans-=mod;
  159. if(ans<0) ans+=mod;
  160.  
  161. i=R+1;
  162. }
  163. printf("%d\n",ans);
  164. }
  165. }

BZOJ 3434 时空穿梭的更多相关文章

  1. 【BZOJ3434】[Wc2014]时空穿梭 莫比乌斯反演

    [BZOJ3434][Wc2014]时空穿梭 Description Input 第一行包含一个正整数T,表示有T组数据求解每组数据包含两行,第一行包含两个正整数N,C(c>=2),分别表示空间 ...

  2. Vue2 实现时空穿梭框功能模块

    前言 这篇文章主要是分享一个时空穿梭框功能,也就是我们平时用的选择功能.勾选了的项就会进入到另一个框中. 时空穿梭框之旅 示例演示: 这个时空穿梭框实现了: 1.可以全选.反选 2.没有选中时,不可以 ...

  3. 【BZOJ】3434: [Wc2014]时空穿梭

    http://www.lydsy.com/JudgeOnline/problem.php?id=3434 题意:n维坐标中要找c个点使得c个点在一条线上且每一维的坐标单调递增且不能超过每一维限定的值m ...

  4. BZOJ 3434 [WC2014]时空穿梭 (莫比乌斯反演)

    题面:BZOJ传送门 洛谷传送门 好难啊..反演的终极题目 首先,本题的突破口在于直线的性质.不论是几维的空间,两点一定能确定一条直线 选取两个点作为最左下和最右上的点! 假设现在是二维空间,选取了$ ...

  5. UOJ#54 BZOJ3434 [WC2014]时空穿梭

    题目描述 小 X 驾驶着他的飞船准备穿梭过一个 \(n\) 维空间,这个空间里每个点的坐标可以用 \(n\) 个实数表示,即 \((x_1,x_2,\dots,x_n)\). 为了穿过这个空间,小 X ...

  6. BZOJ3434 [Wc2014]时空穿梭

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  7. BZOJ3434 WC2014时空穿梭(莫比乌斯反演)

    考虑枚举相邻点距离差的比例.显然应使比例值gcd为1以保证不重复统计.确定比例之后,各维坐标的方案数就可以分开考虑.设比例之和为k,则若坐标上限为m,该维坐标取值方案数即为Σm-ki (i=1~⌊m/ ...

  8. [WC2014]时空穿梭(莫比乌斯反演)

    https://www.cnblogs.com/CQzhangyu/p/7891363.html 不难推到$\sum\limits_{D=1}^{m_1}\sum\limits_{d|D}C_{d-1 ...

  9. UOJ 54 【WC2014】时空穿梭——莫比乌斯反演

    题目:http://uoj.ac/problem/54 想写20分. Subtask 2 就是枚举4个维度的值的比例,可算对于一个比例有多少个值可以选,然后就是组合数.结果好像不对. 因为模数太小,组 ...

随机推荐

  1. Oracle Savepoint

    1.目的: Use the SAVEPOINT statement to identify a point in a transaction to which you can later roll b ...

  2. mybatis(一)安装

    1.创建web项目,添加jar包 2.创建实验表user_t 3.在src下创建conf.xml文件,如下 <?xml version="1.0" encoding=&quo ...

  3. 夺命雷公狗—angularjs—12—get参数的接收

    我们在实际的开发中get和post的交互都是离不开的,我们先来研究下get参数是如何接收到的.. 而且在实际开发中利用json来进行传递参数也是比较多的,这里我们就以get来接收参数为列.. 先创建一 ...

  4. 夺命雷公狗ThinkPHP项目之----企业网站18之网站配置列表页的完成

    我们点击下配置列表即可查看我们列表页的配置信息了: 其实这个最简单了,首先我们先来完成他控制器的代码: public function lists(){ $mod = M('Conf')->se ...

  5. 夺命雷公狗---DEDECMS----18dedecms之无可奈何标签-sql标签取出今天更新

    我们在一些开发时候遇到普通标签都解决不了的问题的时候可以尝试下我们dedecms自带的sql标签,几乎可以完成任何的查询需求 语法如下所示: 我们在这里将刚才首页今天更新那块给改写下,原先的是: {d ...

  6. autohotkey-【GUI】Switch between Windows of the Same Application

    下面给出了ahk的脚本,但我需要GUI http://superuser.com/questions/435602/shortcut-in-windows-7-to-switch-between-sa ...

  7. Linux TTY框架【转】

    本文转载自:http://ju.outofmemory.cn/entry/281168 1. 前言 由于串口的缘故,TTY是Linux系统中最普遍的一类设备,稍微了解Linux系统的同学,对它都不陌生 ...

  8. android:layout_gravity和android:gravity属性的区别

    一.介绍: gravity的中文意思就是”重心“,就是表示view横向和纵向的停靠位置 (1).android:gravity:是对view控件本身来说的,是用来设置view本身的内容应该显示在vie ...

  9. 数32位 unsigned int中1的个数

    参考文章:http://www.cnblogs.com/graphics/archive/2010/06/21/1752421.html 最简单的方法: int BitCount0(unsigned ...

  10. vmdk虚拟机转换为OVF模板,导入esxi

    VMware WorkStation安装目录下,有一个OVFTool文件夹,例如我电脑上的路径为:D:\VMware\VMware\OVFTool.通过CMD进入到命令行模式,更改到该目录下,运行如下 ...