有一个数列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);

代码如下:

 #include<cstdio>
#include<algorithm>
#define mod 1000000007
using namespace std;
struct ss
{
int x,y;
}a[];
long long b[]; bool cmp(ss a,ss b)
{
if(a.x==b.x)
return a.y<b.y;
return a.x<b.x;
}
long long sqr(long long ,int ); int main()
{
int n,m,k;
long long sz1=;
long long ans=;
int i,j,l;
scanf("%d%d%d",&n,&m,&k);
sz1=(long long)n*(n+)/%mod;
for(i=;i<=k;i++)
scanf("%d%d",&a[i].x,&a[i].y);
sort(a+,a+k+,cmp);
j=;
for(i=;i<=k;i++)
{
if(a[i].x!=a[i-].x)
b[++j]=a[i].y;
else
if(a[i].y!=a[i-].y)
b[j]=(b[j]+a[i].y)%mod;
}
for(i=;i<=j;i++)
ans=(ans*(sz1-b[i]+mod))%mod;
m=m-j;
ans=(ans*sqr(sz1,m))%mod;
printf("%lld",ans);
return ;
} long long sqr(long long sz,int m)
{
long long ans=;
while(m)
{
if(m&)
ans=(ans*sz)%mod;
sz=(sz*sz)%mod;
m=m>>;
}
return ans;
}

祝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. 使用代理下载Android SDK

    hx.gy:1080是红杏公益服务器,方便科学工作者访问一些常用的科学网站. 在Android SDK Manager中选择[Tools]->[Options],如下设置: HTTP Proxy ...

  2. A Neural Network in 11 lines of Python

    A Neural Network in 11 lines of Python A bare bones neural network implementation to describe the in ...

  3. maven 项目编译时候提示:Error building POM (may not be this project's POM).

    编译时候提示Error building POM (may not be this project's POM)的错误,具体信息如下: [0] 'dependencies.dependency.ver ...

  4. 【无聊放个模板系列】HDU 3068 MANACHER

    #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #inc ...

  5. C++的表驱动法

    目的:使用表驱动法,替换复杂的if/else和switch/case语句. 说明:JS 等其他语言也都支持的. 表驱动发示例:http://blog.csdn.net/zhouyulu/article ...

  6. easyui源码翻译1.32--Layout(布局)

    前言 使用$.fn.layout.defaults重写默认值对象.下载该插件翻译源码 布局容器有5个区域:北.南.东.西和中间.中间区域面板是必须的,边缘的面板都是可选的.每个边缘区域面板都可以通过拖 ...

  7. 找不到mysql服务或mysql服务名无效

    问题原因:mysql服务没有安装. 解决办法: 在 mysql bin目录下 以管理员的权限 执行 mysqld -install命令 出现:Service successfully installe ...

  8. 第二章 LM3S USB处理器

    2.1 LM3S处理器简介 Luminary Micr公司Stellaris所提供一系列的微控制器是首款基于Cortex-m3的控制器,它们为对成本尤其敏感的嵌入式微控制器应用方案带来了高性能的32位 ...

  9. BZOJ_1821_[JSOI2010]_部落划分_(贪心,并查集)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1821 给出n个点的坐标,将n个点划分成k个部分,使得每个部分之间最小的距离最大. 分析 每两个 ...

  10. C# asp.net 操作Word的前提配置和简单的方法

    操作的前提: 1.要保证机器本身要安装OFFICE. 有时安装了Office,但是不能找到Microsoft Word 11.0(或者更高的版本) Object Library.那可能是因为在安装of ...