【HAOI2012】容易题
终于自己做出一道题了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计算了
还要提升思考的精细程度啊……
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
#define ll long long
const int dalao=;
int rd(){int z=,mk=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')mk=-; ch=getchar();}
while(ch>=''&&ch<=''){z=(z<<)+(z<<)+ch-''; ch=getchar();}
return z*mk;
}
struct dcd{int x,y;}a[];
bool cmp(dcd x,dcd y){ return (x.x==y.x)?(x.y<y.y):(x.x<y.x);}
int n,m,t; ll M;
ll bwl[];
int c[],b[],tt=;
ll qckpw(ll x,int y){
ll z=,bs=x;
while(y){
if(y&) z=(z*bs)%dalao;
bs=(bs*bs)%dalao;
y>>=;
}
return z;
}
int bnrsch(ll x){
int l=,r=tt,md;
while(l+<r) md=(l+r)>>,(b[md]<=x ? l : r)=md;
return b[r]==x ? r : l;
}
int main(){//freopen("ddd.in","r",stdin);
cin>>m>>n>>t; M=((ll)(+m)*m/)%dalao;
for(int i=;i<=t;++i) a[i].x=rd(),a[i].y=rd(),c[i]=a[i].x;
sort(a+,a+t+,cmp);
sort(c+,c+t+);
for(int i=;i<=t;++i)if(c[i]!=c[i-]) b[++tt]=c[i];
for(int i=;i<=tt;++i) bwl[i]=M;
for(int i=;i<=t;++i)if(!(a[i].x==a[i-].x && a[i].y==a[i-].y))
bwl[bnrsch(a[i].x)]=(bwl[bnrsch(a[i].x)]-a[i].y+dalao)%dalao;
ll ans=;
for(int i=;i<=tt;++i) ans=(ans*bwl[i])%dalao;
cout<<(ans*qckpw(M,n-tt))%dalao<<endl;
return ;
}
【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的自然数 ...
- [HAOI2012] 容易题
有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些A[i]不能取哪些值,我们定义一个数列的积为该数列所有元素的乘积,要求你求出所有可能的数列的积的和 mod 1000000007的 ...
- BZOJ2751 [HAOI2012]容易题
Description 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下: 有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些A[i]不能取 ...
- 2018.11.07 bzoj2751: [HAOI2012]容易题(easy)(组合数学)
传送门 组合数学一眼题. 感觉一直做这种题智商会降低. 利用组合数学的分步计数原理. 只用关心每个数不被限制的取值的总和然后乘起来就可以了. 对于大部分数都不会被限制,总和都是n(n+1)2\frac ...
随机推荐
- In-App Purchase iap 内付费 二次验证代码 (java 服务器端)
参考网址:https://blog.csdn.net/a351945755/article/details/22919533 package com.yichangmao.buyVerify.Comm ...
- vue-router-5-命名路由
创建 Router 实例的时候,在 routes 配置中给某个路由设置名称 const router = new VueRouter({ routes: [ { path: '/user/:userI ...
- (C/C++学习笔记) 二. 数据类型
二. 数据类型 ● 数据类型和sizeof关键字(也是一个操作符) ※ 在现代半导体存储器中, 例如在随机存取存储器或闪存中, 位(bit)的两个值可以由存储电容器的两个层级的电荷表示(In mode ...
- Python自动化必备发送邮件报告脚本详解
#!/usr/bin/python3# -*- coding:UTF-8 -*-import smtplib#smtplib库主要用来连接第三方smtp库,用来发邮件from email.mime.t ...
- AngularJS输出helloworld
AngularJS是什么? AngularJS是目前很火的前端JS框架之一, AngularJS的开发团队将其描述为一种构建动态Web应用的结构化框架.它是完全使用JavaScript编写的客户端技术 ...
- freemarker学习 (servlet + freemarker -> Struts2+freemarker -> springMVC+freemarker)
什么是freemarker? freemarker类似于jsp,但不是jsp!怎么说呢?freemarker文件后缀是.ftl,它不像jsp本质是servlet,它将构建模板.解析模板.使用模板分离开 ...
- android小程序-电子钢琴-多点触控
我在第一篇博客<android小程序-电子钢琴-滑动连续响应>中实现了一个简单地7键钢琴,这几天把它又完善了一下,增加了多点触控,按键也增加了一个低音区和一个高音区,使得又可以多弹一点简单 ...
- python自学第四天,字符串用法
String 的用法 names="张三 welcome {city}" print(names.capitalize())#首字母大写 print(names.count(&qu ...
- filebeat成精之路
https://www.cnblogs.com/jingmoxukong/p/8185321.html
- REST是什么?
REST -- REpresentational State Transfer 直接翻译:表现层状态转移. @Ivony 老师的一句话概括很精辟: 用URL定位资源,用HTTP动词(GET,POS ...