[HAOI2012] 容易题
有一个数列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] 容易题的更多相关文章
- BZOJ 2751: [HAOI2012]容易题(easy) 数学
2751: [HAOI2012]容易题(easy) 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2751 Description 为了使 ...
- BZOJ2751: [HAOI2012]容易题(easy)
2751: [HAOI2012]容易题(easy) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 872 Solved: 377[Submit][S ...
- BZOJ 2751: [HAOI2012]容易题(easy)( )
有限制的最多就K个, 所以我们处理一下这K个就行了. 其他可以任选, 贡献都是∑i (1≤i≤N), 用快速幂. ------------------------------------------- ...
- 2751: [HAOI2012]容易题(easy)
2751: [HAOI2012]容易题(easy) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1087 Solved: 477[Submit][ ...
- [HAOI2012] 容易题[母函数]
794. [HAOI2012] 容易题 ★★☆ 输入文件:easy.in 输出文件:easy.out 简单对比时间限制:1 s 内存限制:128 MB 秒 输入:easy.in 输出: ...
- 【bzoj2751】[HAOI2012]容易题(easy) 数论-快速幂
[bzoj2751][HAOI2012]容易题(easy) 先考虑k=0的情况 那么第一个元素可能为[1,n] 如果序列长度为m-1时的答案是ans[m-1] 那么合并得 然后同理答案就是 k很小 而 ...
- 洛谷 P2220 [HAOI2012]容易题 数论
洛谷 P2220 [HAOI2012]容易题 题目描述 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下: 有一个数列A已知对于所有的A[i]都是1~n的自然数 ...
- BZOJ2751 [HAOI2012]容易题
Description 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下: 有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些A[i]不能取 ...
- 2018.11.07 bzoj2751: [HAOI2012]容易题(easy)(组合数学)
传送门 组合数学一眼题. 感觉一直做这种题智商会降低. 利用组合数学的分步计数原理. 只用关心每个数不被限制的取值的总和然后乘起来就可以了. 对于大部分数都不会被限制,总和都是n(n+1)2\frac ...
随机推荐
- BZOJ 4027 [HEOI 2015] 兔子与樱花 解题报告
这个题看起来好神的感觉.实际上也好神... 我们可以考虑设 $f_u$ 表示以 $u$ 为根的子树中最多能删多少个点, 再设 $g_u$ 表示以 $u$ 为根的子树中删了 $f_u$ 个点之后,$u$ ...
- hdu 4286
splay 练手用: 杭电的oj要手动开栈: #include<cstdio> #pragma comment(linker, "/STACK:102400000,1024000 ...
- Unity3D热更新
原地址:http://crazylights.cnblogs.com/ 下载在这个时代实在是太平常了,每个人都深刻的理解着下载到底是什么. 这一篇文字只是把下载的代码分享并介绍,而已. 首先,下载系统 ...
- 中国海洋大学第四届朗讯杯高级组 I Cuckoo for Hashing
http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2719&cid=1203 题意 :意思就是哈希来的,具体大意就是说有两个哈希表,然后有这样 ...
- POJ 3352 Road Construction (边双连通分量)
题目链接 题意 :有一个景点要修路,但是有些景点只有一条路可达,若是修路的话则有些景点就到不了,所以要临时搭一些路,以保证无论哪条路在修都能让游客到达任何一个景点 思路 :把景点看成点,路看成边,看要 ...
- HDU1395+快速幂
#include<stdio.h> int fast_pow( int a,int b,int mod ){ ; ){ == ){ res = res*a%mod; } a = a*a%m ...
- easyui源码翻译1.32--SplitButton(分割按钮)
前言 扩展自$.fn.linkbutton.defaults.用于$.fn.splitbutton.defaults重写默认值对象.下载该插件翻译源码 类似菜单按钮,分割按钮也与linkbutton和 ...
- 批量生成卡号密码的php程序
<?php header('Content-Type:text/html; charset=utf-8'); function MakeCard() { set_time_limit(0); / ...
- 2013年最受欢迎的16个HTML5 WordPress主题
本文中,我整理了16个最新.最受欢迎的WordPress主题,它们一致的特征是支持HTML5, 它们秉承最佳设计理念以及最新的流行趋势,将它们归纳与此,希望对喜欢HTML5,准备用WordPress做 ...
- 【HDOJ】5046 Airport
DLX简单题目. /* 5046 */ #include <iostream> #include <string> #include <map> #include ...