• 2016 Asia Jakarta Regional Contest J


    J-Super Sum

    题目大意就是给定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<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     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             else
    44             {
    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 #"<<cas<<": ";
    49         cout<<ans<<endl;
    50     }
    51     return 0;
    52 }
    53  
  • 相关阅读:
    Kafka调试入门(一)
    java笔记十五——多线程
    java笔记十四——初始集合源码
    java笔记十二——集合总结
    java笔记十一——异常
    java笔记十——大数类和日期类
    java笔记九——Object类与String类
    java笔记八——面向对象(三)
    java笔记七——面向对象(二)
    java笔记六——面向对象(一)
  • 原文地址:https://www.cnblogs.com/zxhyxiao/p/7266652.html
Copyright © 2020-2023  润新知