终于自己做出一道题了quq

原题:

为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下:
有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些A[i]不能取哪些值,我们定义一个数列的积为该数列所有元素的乘积,要求你求出所有可能的数列的积的和 mod 1000000007的值,是不是很简单呢?呵呵!

n<=10^9,m<=10^9,k<=10^5,1<=y<=n,1<=x<=m

这道题挺有意思的,用到了很多基础的知识(其实就是因为简单好写容易AC_(:3 」∠)_

小学级结论:

假设三个位置分别能用三个数a1,a2,a3,b1,b2,b3,c1,c2,c3,手玩一下就可以发现答案是(a1+a2+a3)*(b1+b2+b3)*(c1+c2+c3)

然后每个位置初始的和是(1+n)*n/2,如果有数不能选就直接减掉,数据很良心地提示可能会有重复的(如果不提示我估计想不到

然后搞一搞就行了

注意到m<=1e9,时空爆炸

其实也很好搞,离散化一个,先计算有数被删掉的,剩下的位置的数的和都是(1+n)*n/2,快速幂搞一搞就行了

判重怎么办呐

最开始我想的是set,map,或者搞个平衡树?

然后发现,搞个毛啊,离线即可

这么简单的题WA了两发quq(最开始没考虑到m<=1e9没离散直接从1到m计算了

还要提升思考的精细程度啊……
代码:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<cmath>
  6. using namespace std;
  7. #define ll long long
  8. const int dalao=;
  9. int rd(){int z=,mk=; char ch=getchar();
  10. while(ch<''||ch>''){if(ch=='-')mk=-; ch=getchar();}
  11. while(ch>=''&&ch<=''){z=(z<<)+(z<<)+ch-''; ch=getchar();}
  12. return z*mk;
  13. }
  14. struct dcd{int x,y;}a[];
  15. bool cmp(dcd x,dcd y){ return (x.x==y.x)?(x.y<y.y):(x.x<y.x);}
  16. int n,m,t; ll M;
  17. ll bwl[];
  18. int c[],b[],tt=;
  19. ll qckpw(ll x,int y){
  20. ll z=,bs=x;
  21. while(y){
  22. if(y&) z=(z*bs)%dalao;
  23. bs=(bs*bs)%dalao;
  24. y>>=;
  25. }
  26. return z;
  27. }
  28. int bnrsch(ll x){
  29. int l=,r=tt,md;
  30. while(l+<r) md=(l+r)>>,(b[md]<=x ? l : r)=md;
  31. return b[r]==x ? r : l;
  32. }
  33. int main(){//freopen("ddd.in","r",stdin);
  34. cin>>m>>n>>t; M=((ll)(+m)*m/)%dalao;
  35. for(int i=;i<=t;++i) a[i].x=rd(),a[i].y=rd(),c[i]=a[i].x;
  36. sort(a+,a+t+,cmp);
  37. sort(c+,c+t+);
  38. for(int i=;i<=t;++i)if(c[i]!=c[i-]) b[++tt]=c[i];
  39. for(int i=;i<=tt;++i) bwl[i]=M;
  40. for(int i=;i<=t;++i)if(!(a[i].x==a[i-].x && a[i].y==a[i-].y))
  41. bwl[bnrsch(a[i].x)]=(bwl[bnrsch(a[i].x)]-a[i].y+dalao)%dalao;
  42. ll ans=;
  43. for(int i=;i<=tt;++i) ans=(ans*bwl[i])%dalao;
  44. cout<<(ans*qckpw(M,n-tt))%dalao<<endl;
  45. return ;
  46. }

【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. [HAOI2012] 容易题

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

  9. BZOJ2751 [HAOI2012]容易题

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

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

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

随机推荐

  1. day18-python的正则表达式

    1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十 ...

  2. 一次jenkins的错误

    描述:我svn修改了一个类的名称,然后构建到jenkins发现,原来的类还在然后和现在的类一起冲突 解决:清理工作空间 然后重新部署即可.

  3. oo作业总结报告

    oo第一次博客 以前从未真正的写过Java代码,接触Java也只是寒假的时候简单的看了看语法,不懂该如何面向对象,但没事,心里不惧,想着什么都是可以学的(直到真正开始写工程的时候,才发现自己还是太天真 ...

  4. HTML(三)选择器--复杂选择器

    1.父子选择器/派生选择器 <div calss="wrapper"> <span calss="box">123</span&g ...

  5. 稀疏 部分 Checkout

    To easily select only the items you want for the checkout and force the resulting working copy to ke ...

  6. day34 线程池 协程

    今日内容: 1. 线程的其他方法 2.线程队列(重点) 3.线程池(重点) 4.协程 1.线程的其他方法 语法: Threading.current_thread() # 当前正在运行的线程对象的一个 ...

  7. HanLP自然语言处理包介绍

    支持中文分词(N-最短路分词.CRF分词.索引分词.用户自定义词典.词性标注),命名实体识别(中国人名.音译人名.日本人名.地名.实体机构名识别),关键词提取,自动摘要,短语提取,拼音转换,简繁转换, ...

  8. DevExpress v18.1新版亮点——CodeRush for VS篇(二)

    用户界面套包DevExpress v18.1日前正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了CodeRush for Visual Studio v18.1 的新功能,快来下载试 ...

  9. Problem A: 编写函数:三个数的最大最小值

    Description 给出三个数a,b,c,最大值是?最小值是? ------------------------------------------------------------------ ...

  10. org.apache.httpcomponents httpclient 发起HTTP JSON请求

    1. pom.xml <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactI ...