注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

时光机TimeMachine

——一个退役OIer

 
 
 

日志

 
 

[BZOJ2751][HAOI2012]容易题(easy)  

2015-01-09 17:25:23|  分类: Problems |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

2751: [HAOI2012]容易题(easy)

果然题如其名是道大水题……
题解在代码下方

#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
const int N = 1E5+10;
typedef long long ll;
typedef pair<int,int>Data;
const int MOD = 1000000007;
int n,m;
Data data[N];
int scan(){int i=0;scanf("%d",&i);return i;}
int pow(int x,int k){
int re=1;
for(;k;k/=2,x=(ll)x*x%MOD)
if(k&1)re=(ll)re*x%MOD;
return re;
}
bool operator < (Data a,Data b){return a.first==b.first?a.second < b.second:a.first<b.first;}
int main(){
int i,j,a,b,tn=0,tmp=0,val;
val = scan();n = scan();m = scan();
int all = (ll)val*(val+1)/2 %MOD,ans = 1;
for(i=1;i<=m;i++){
a = scan();b = scan();
data[i] = Data(a,b);
}
sort(data+1,data+1+m);
m = unique(data+1,data+1+m)-data-1;
for(i=1;i<=m;i++){
tmp =(tmp+data[i].second)%MOD;
if(i==m || data[i].first!=data[i+1].first){
ans = (ll)ans*(all-tmp)%MOD;
tmp = 0;tn++;
}
}
ans = (ll)ans*pow(all,n-tn)%MOD;
if(ans < 0)ans += MOD;
printf("%d\n",ans);
return 0;
}

题解:
首先考虑暴力……然后你会得到一堆式子,从前往后合并同类项,可以发现顺序无所谓,可以先算m-1个的再算m个的。
然后显然答案就是π(i=1~m)Σ(所有可行的)a[i]
虽然m很大,但是k只有1e5,所有许多位置可以全选,把没有限制的部分直接一起算就行了
  评论这张
 
阅读(184)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017