有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些A[i]不能取哪些值,我们定义一个数列的积为该数列所有元素的乘积,要求你求出所有可能的数列的积的和 mod 1000000007的值;

--by洛谷;

http://daniu.luogu.org/problem/show?pid=2220



简单题?呵呵

首先,她有个公式

我们先假设k=0;

ai为a位的可能;bi为b位的可能;ci为c位的可能...

则:

a1*b1*c1+a1*b1*c2+a1*b2*c1+a1*b2*c2+a2*b1*c1+a2*b1*c2+a2*b2*c1+a2*b2*c2;

你提公因式嘛;

a1*(b1*c1+b1*c2+b2*c1+b2*c2)+a2*(b1*c1+b1*c2+b2*c1+b2*c2);

再提

a1*[b1*(c1+c2)+b2*(c1+c2)]+a2*[b1*(c1+c2)+b2*(c1+c2)];

a1*(b1+b2)*(c1+c2)+a2*(b1+b2)*(c1+c2);

(a1+a2)*(b1+b2)*(c1+c2);

再通过k的存在,对每位的可能减zi;

(a1+a2-z1)*(b1+b2-z2)*(c1+c2-z3);

然后每一位在k=0一样,即a1+a2=b1+b2=c1+c2=sum(n);

(sum(n)-z1)*(sum(n)-z2)*(sum(n)-z3);

所以,这叫简单题?

就想预处理sum(n)然后O(n)乘,每次记得减z;

然而O(n)也过不了——n=1e9。。。

所以,这叫简单题?

但是我们发现,k比较小,1e5;

所以有限制的位置,小于等于1e5;

我们可以先算她们,然后剩下的写一个快速幂;

时间效率O(klogk+k+log(n-k));

(因为有个sort);

代码如下:

  1. #include<cstdio>
  2. #include<algorithm>
  3. #define mod 1000000007
  4. using namespace std;
  5. struct ss
  6. {
  7. int x,y;
  8. }a[];
  9. long long b[];
  10.  
  11. bool cmp(ss a,ss b)
  12. {
  13. if(a.x==b.x)
  14. return a.y<b.y;
  15. return a.x<b.x;
  16. }
  17. long long sqr(long long ,int );
  18.  
  19. int main()
  20. {
  21. int n,m,k;
  22. long long sz1=;
  23. long long ans=;
  24. int i,j,l;
  25. scanf("%d%d%d",&n,&m,&k);
  26. sz1=(long long)n*(n+)/%mod;
  27. for(i=;i<=k;i++)
  28. scanf("%d%d",&a[i].x,&a[i].y);
  29. sort(a+,a+k+,cmp);
  30. j=;
  31. for(i=;i<=k;i++)
  32. {
  33. if(a[i].x!=a[i-].x)
  34. b[++j]=a[i].y;
  35. else
  36. if(a[i].y!=a[i-].y)
  37. b[j]=(b[j]+a[i].y)%mod;
  38. }
  39. for(i=;i<=j;i++)
  40. ans=(ans*(sz1-b[i]+mod))%mod;
  41. m=m-j;
  42. ans=(ans*sqr(sz1,m))%mod;
  43. printf("%lld",ans);
  44. return ;
  45. }
  46.  
  47. long long sqr(long long sz,int m)
  48. {
  49. long long ans=;
  50. while(m)
  51. {
  52. if(m&)
  53. ans=(ans*sz)%mod;
  54. sz=(sz*sz)%mod;
  55. m=m>>;
  56. }
  57. return ans;
  58. }

祝AC哟;

[HAOI2012] 容易题的更多相关文章

  1. BZOJ 2751: [HAOI2012]容易题(easy) 数学

    2751: [HAOI2012]容易题(easy) 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2751 Description 为了使 ...

  2. BZOJ2751: [HAOI2012]容易题(easy)

    2751: [HAOI2012]容易题(easy) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 872  Solved: 377[Submit][S ...

  3. BZOJ 2751: [HAOI2012]容易题(easy)( )

    有限制的最多就K个, 所以我们处理一下这K个就行了. 其他可以任选, 贡献都是∑i (1≤i≤N), 用快速幂. ------------------------------------------- ...

  4. 2751: [HAOI2012]容易题(easy)

    2751: [HAOI2012]容易题(easy) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1087  Solved: 477[Submit][ ...

  5. [HAOI2012] 容易题[母函数]

    794. [HAOI2012] 容易题 ★★☆   输入文件:easy.in   输出文件:easy.out   简单对比时间限制:1 s   内存限制:128 MB 秒 输入:easy.in 输出: ...

  6. 【bzoj2751】[HAOI2012]容易题(easy) 数论-快速幂

    [bzoj2751][HAOI2012]容易题(easy) 先考虑k=0的情况 那么第一个元素可能为[1,n] 如果序列长度为m-1时的答案是ans[m-1] 那么合并得 然后同理答案就是 k很小 而 ...

  7. 洛谷 P2220 [HAOI2012]容易题 数论

    洛谷 P2220 [HAOI2012]容易题 题目描述 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下: 有一个数列A已知对于所有的A[i]都是1~n的自然数 ...

  8. BZOJ2751 [HAOI2012]容易题

    Description 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下: 有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些A[i]不能取 ...

  9. 2018.11.07 bzoj2751: [HAOI2012]容易题(easy)(组合数学)

    传送门 组合数学一眼题. 感觉一直做这种题智商会降低. 利用组合数学的分步计数原理. 只用关心每个数不被限制的取值的总和然后乘起来就可以了. 对于大部分数都不会被限制,总和都是n(n+1)2\frac ...

随机推荐

  1. ExpressionTree——让反射性能向硬编码看齐

    缘起 最近又换了工作.然后开心是以后又能比较频繁的关注博客园了.办离职手续的这一个月梳理了下近一年自己写的东西,然后就有了此文以及附带的代码. 反射 关于反射,窃以为,他只是比较慢.在这个前提下,个人 ...

  2. SQL中Case的使用方法(上篇)(转)

    http://www.cnblogs.com/fxgachiever/archive/2010/09/09/1822106.html Case具有两种格式.简单Case函数和Case搜索函数. --简 ...

  3. Jmeter使用——参数化

    最近一个想项目使用jmeter进行测试,陆续将遇到并解决的问题记录下来,本次主要记录参数化得一些问题. 1. 单台压力机 多个线程组不重复数字,注意分布式负载时多个压力机会出现重复的问题 主要思路分别 ...

  4. 在ubuntu下关闭笔记本触摸板

    http://www.cnblogs.com/icejoywoo/archive/2011/04/14/2016318.html 原文地址:http://forum.ubuntu.org.cn/vie ...

  5. 乱序双发射 和 GHB的分支预测

    乱序执行(out-of-order execution)是指CPU采用了允许将多条指令不按程序规定的顺序分开发送给各相应电路单元处理的技术.比方Core乱序执行引擎说程序某一段有7 条指令,此时CPU ...

  6. SPRING IN ACTION 第4版笔记-第四章ASPECT-ORIENTED SPRING-002-AOP术语解析

    一. 1.Advice Advice是切面的要做的操作,它定义了what.when(什么时候要做什么事) aspects have a purpose—a job they’re meant to d ...

  7. 把硬盘格式化成ext格式的cpu占用率就下来了

    把硬盘格式化成ext格式的cpu占用率就下来了我是使用ext4格式 @Paulz 还有这种事情? 现在是什么格式?- - ,你自己用top命令看一下啊就知道什么东西在占用cpu了下载软件一半cpu都用 ...

  8. windows上制作懒人版MAC cdr/iso

    本教程以XPS15 L501X机型为例在windows7下讲解Lion纯净系统的制作及安装过程,以及一些后续美化,如果已有mac系统,就更简单了,照猫画虎即可.主楼的帖子对新手来讲信息量太大,所以关于 ...

  9. Win32下 Qt与Lua交互使用(二):在Lua脚本中使用Qt类

    话接上篇.成功配置好Qt+Lua+toLua后,我们可以实现在Lua脚本中使用各个Qt的类.直接看代码吧. #include "include/lua.hpp" #include ...

  10. 【转】was mutated while being enumerated 你是不是以为你真的懂For...in... ??

    原文网址:http://www.jianshu.com/p/ad80d9443a92 支持原创,如需转载, 请注明出处你是不是以为你真的懂For...in... ??哈哈哈哈, 我也碰到了这个报错 . ...