博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2016 Asia Jakarta Regional Contest J - Super Sum UVALive - 7720 【快速幂+逆元】
阅读量:6474 次
发布时间:2019-06-23

本文共 1517 字,大约阅读时间需要 5 分钟。

题目大意就是给定N个三元组<a,b,c>求Σ(a1^k1*a2^k2*...*ai^ki*..an^kn)(bi<=ki<=ci)

唉。其实题目本身不难的,怪我不知道当时怎么想的。。。本来观察式子很容易能得出结论:

比如<5,2,3>,<2,1,4>,<3,2,2>这组:

  5^2*2^1*3^2+5^2*2^2*3^2+5^2*2^3*3^2+5^2*2^4*^32=5^2*(2^1+2^2+2^3+2^4)*3^2;

  5^3*2^1*3^2+5^3*2^2*3^2+5^3*2^3*3^2+5^3*2^4*^32=5^3*(2^1+2^2+2^3+2^4)*3^2;

  =(5^2+5^3)*(2^1+2^2+2^3+2^4)*3^2;

很明显啊!就行对应三元组的等比数列相乘啊!

用组合的角度看也是啊,那几个式子不就相当于最后这个式子拆开再相加吗!

到这里基本就已经解决问题了。。。。。。。。。唯一需要注意的就是等比数列相乘时有除法,求模的时候要把分母转化成它的逆元。

1 #include
2 #include
3 #include
4 #include
5 using namespace std; 6 typedef long long ll; 7 const int mod=1e9+7; 8 9 10 ll qpow(ll a,ll b)//快速幂11 {12 ll r=1;13 while(b)14 {15 if(b&1) r=r*a%mod;16 b>>=1;17 a=a*a%mod;18 }19 return r;20 }21 22 ll inv(ll a)//费马小定理求逆元23 {24 return qpow(a,mod-2);25 }26 27 int main()28 {29 int T;30 cin>>T;31 for (int cas=1;cas<=T;cas++)32 {33 int n;34 cin>>n;35 ll ans=1;36 for (int i=1;i<=n;i++)37 {38 ll a,b,c;39 cin>>a>>b>>c;40 if(a==1){
//公比为1单独处理41 ans=(ans%mod*(c-b+1)%mod)%mod;42 }43 else44 {45 ans=(ans%mod*(qpow(a,b)%mod*(qpow(a,c-b+1)-1)%mod*inv(a-1)%mod)%mod)%mod;46 }47 }48 cout<<"Case #"<
<<": ";49 cout<
<

 

转载于:https://www.cnblogs.com/zxhyxiao/p/7266652.html

你可能感兴趣的文章
Java并发基本概念
查看>>
k8s-08-dashboard部署
查看>>
git常用命令大全
查看>>
Nagios-使用NSClient++ 监控 windows主机
查看>>
shellinabox - 在瀏覽器操作 Linux Shell
查看>>
Newtonsoft中JArray 转成list<object>
查看>>
Vue + json-server实现后台管理系统
查看>>
顶尖酒店宾馆管理信息系统SQL AnyWhere数据库修复成功
查看>>
CSMA/CD过程
查看>>
TurboMail,让企业建设自有的邮件服务器不再是难事
查看>>
微软回应360“补丁门”事件:那肯定不是微软的产品
查看>>
SVG学习笔记
查看>>
策略模式
查看>>
[置顶] 使用jQuery的9个误区
查看>>
我的友情链接
查看>>
从30岁到35岁:为你的生命多积累一些厚度
查看>>
Bash 测试和比较函数
查看>>
delphi 文件操作
查看>>
怎么一步步编写简单的PHP的Framework(十四)
查看>>
我的友情链接
查看>>