P2220 [HAOI2012]容易题[小学数学]
题目描述
为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下:
有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些A[i]不能取哪些值,我们定义一个数列的积为该数列所有元素的乘积,要求你求出所有可能的数列的积的和 mod 1000000007的值,是不是很简单呢?呵呵!
解析
标签里面数论是骗人的(雾),难道是因为有个取模吗???
这题还是很简单的,首先观察数据范围,发现k比较小,那我们就对它做文章。
我们不妨先求出没有限制条件下的总和,再减去限制条件造成的影响,这样复杂度就与k有关了。
假设\(p\)为除了位置\(i\)其余位置的积,那么
\(ans=1*p+2*p+\cdots+n*p=(\frac{n(n+1)}{2})*p\)
对于任意位置,显然都是这个东西。
那么\(ans={(\frac{n(n+1)}{2})}^m\)。
或者理解作一堆项相乘,\(ans=(1+2+\cdots+n)*(1+2+\cdots+n)*\cdots\)
总共有\(m\)项,就变成上面那个东西。
然后我们考虑限制条件。
先对限制按位置排序,对于一个位置\(i\)的所有限制条件,若它们的和为\(sum\),很容易看出它们剔除的答案为\(sum*{(\frac{n(n+1)}{2})}^{m-i-1}*now\)。其中\(now\)为剔除过限制条件的\(1\sim i-1\)的积。\(now\)的初始值是1,每次剔除都乘上\(\frac{n(n+1)}{2}-sum\)。
而且,由于每次剔除的位置对最后结果无影响,离散化。
复杂度\(O(klogm+klogk)\)。
我的代码写的比较鬼畜,还请各位大佬见谅QWQ。
参考代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
#include<cstdlib>
#include<queue>
#include<vector>
#include<set>
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
#define N 100010
#define MOD 2520
#define E 1e-12
#define ll long long
#define mod 1000000007
#define div 500000004
using namespace std;
inline int read()
{
int f=1,x=0;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
return x*f;
}
ll n,m,k,sum[N];
set<int> s[N];
struct node{
int pos,x;
inline bool operator<(const node &a)const{
return a.pos>pos;
}
}a[N];
inline ll qp(ll a,ll b){ll ans=1;for(;b;b>>=1){if(b&1)ans=(ans*a)%mod;a=(a*a)%mod;}return ans%mod;}
int main()
{
n=read(),m=read(),k=read();
for(int i=1;i<=k;++i)
a[i].pos=read(),a[i].x=read();
sort(a+1,a+k+1);
int cnt=1,pos=a[1].pos;
for(int i=1;i<=k;++i){
if(pos==a[i].pos){
if(s[cnt].find(a[i].x)!=s[cnt].end()) continue;
s[cnt].insert(a[i].x),sum[cnt]=(sum[cnt]%mod+a[i].x%mod)%mod;
}
else s[++cnt].insert(a[i].x),sum[cnt]=(sum[cnt]%mod+a[i].x%mod)%mod;
pos=a[i].pos;
}//脑抽写的set离散化
ll tmp=(n%mod*(n+1)%mod*div%mod)%mod;
ll ans=qp(tmp,m)%mod;
ll now=1;
for(int i=1;i<=cnt;++i){
ans=(ans%mod-sum[i]%mod*qp(tmp,m-i)%mod*now%mod+2*mod)%mod;
now=(now%mod*(tmp%mod-sum[i]%mod+2*mod)%mod)%mod;
}
printf("%lld\n",ans%mod);
return 0;
}
P2220 [HAOI2012]容易题[小学数学]的更多相关文章
- 洛谷 P2220 [HAOI2012]容易题 数论
洛谷 P2220 [HAOI2012]容易题 题目描述 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下: 有一个数列A已知对于所有的A[i]都是1~n的自然数 ...
- BZOJ 2751: [HAOI2012]容易题(easy) 数学
2751: [HAOI2012]容易题(easy) 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2751 Description 为了使 ...
- P2220 [HAOI2012]容易题(快速幂)
Describe 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下: 有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些A[i]不能取哪些值 ...
- P2220 [HAOI2012]容易题【快速幂】
题目描述 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下: 有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些A[i]不能取哪些值,我们定 ...
- P2220 [HAOI2012]容易题
传送门 首先 $(\sum_{i=1}^{n}a_i)(\sum_{i=1}^{m}b_i)$ 展开以后包含了所有 $ab$ 两两相乘的情况并且每种组合只出现一次 发现展开后刚好和题目对序列价值的定义 ...
- sdut 2445 小学数学
小学数学 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 题目链接:http://acm.sdut.edu.cn/sdutoj/p ...
- 【BZOJ4429】[Nwerc2015] Elementary Math小学数学 最大流
[BZOJ4429][Nwerc2015] Elementary Math小学数学 Description Ellen给她的学生教小学数学.期末考试已经来临了.考试有n个题目,每一个题目学生们都要对一 ...
- 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), 用快速幂. ------------------------------------------- ...
随机推荐
- MinGW g++.exe 编译 DLL 时,导出函数名带@的问题
今天尝试用CodeBlocks写了一个简单的Dll,发现生成的 dll 文件导出的函数名后面都有一个 @xxx 从生成的 libDll2.def 中看到: EXPORTS DllMain@ @ Max ...
- Jenkins+Docker+Git+Registry
从0到1体验Jenkins+Docker+Git+Registry实现CI自动化发布 笔者:@拿着保温瓶的年轻人 目录: 一.前言 二.发布流程 三.环境准备 四.部署思路梳理 五.三台机器上操作 ...
- Alpha冲刺(7/10)——2019.4.29
作业描述 课程 软件工程1916|W(福州大学) 团队名称 修!咻咻! 作业要求 项目Alpha冲刺(团队) 团队目标 切实可行的计算机协会维修预约平台 开发工具 Eclipse 团队信息 队员学号 ...
- Linux内核模块管理命令
1.insmod命令 在Linux系统下,insmod命令用于将给定的模块加载到内核中去,Linux系统有许多功能是通过模块的方式,在需要时才载入kernel,这样做可以使kernel较为精简,进而提 ...
- c语言错题本
()malloc(sizeof()) 在stdlib.h包中
- 百度前端技术学院task16源代码
欢迎访问我的github:huanshen 做这道题目的时候遇到了很多困难. 1.怎么给空对象添加数据,愣是不知道从哪里下手:遍历对象,一个个输出操作: 2.中英文的正则表达式不知道,赶紧去百度: 3 ...
- python中 jsonchema 与 shema 效率比较
前面几篇文章总结了python中jsonschema与schema的用法,这里测试一下两者的效率: 上代码: import time from jsonschema import validate, ...
- 在vps上搭建hexo博客
最近更换了服务器,需要把自己的Hexo Next重新部署到新服务器上,本文记录一下在vps上搭建hexo博客的过程. 在vps上搭建hexo博客需要下面这些工具: Nginx: 用于博客展示 SSH: ...
- mybatis-plus 主键自增问题
主键不自增:返回值是插入的条数 <insert id="add" parameterType="EStudent"> insert into TSt ...
- 给定一个长度为N的数组,找出出现次数大于n/2,n/3的数,要求时间复杂度O(n),空间复杂度O(1)
先讨论出现次数大于n/2的数字,如果这样的数字存在,那么这个数出现的次数大于其他数出现的次数的总和. 在数组A中,我们定义两个数据集合a1,a2.a1为出现次数大于n/2的数的集合,a2为其余数组成的 ...