zoukankan      html  css  js  c++  java
  • hdu 5793 A Boring Question(2016第六场多校)

    A Boring Question

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
    Total Submission(s): 487    Accepted Submission(s): 271


    Problem Description
    There are an equation.
    0k1,k2,kmn1j<m(kj+1kj)%1000000007=? 
    We define that (kj+1kj)=kj+1!kj!(kj+1kj)! . And (kj+1kj)=0 while kj+1<kj .
    You have to get the answer for each n and m that given to you.
    For example,if n=1 ,m=3 ,
    When k1=0,k2=0,k3=0,(k2k1)(k3k2)=1 ;
    Whenk1=0,k2=1,k3=0,(k2k1)(k3k2)=0 ;
    Whenk1=1,k2=0,k3=0,(k2k1)(k3k2)=0 ;
    Whenk1=1,k2=1,k3=0,(k2k1)(k3k2)=0 ;
    Whenk1=0,k2=0,k3=1,(k2k1)(k3k2)=1 ;
    Whenk1=0,k2=1,k3=1,(k2k1)(k3k2)=1 ;
    Whenk1=1,k2=0,k3=1,(k2k1)(k3k2)=0 ;
    Whenk1=1,k2=1,k3=1,(k2k1)(k3k2)=1 .
    So the answer is 4.
     
    Input
    The first line of the input contains the only integer T ,(1T10000) 
    Then T lines follow,the i-th line contains two integers n ,m ,(0n109,2m109) 
     
    Output
    For each n and m ,output the answer in a single line.
     
    Sample Input
    2
    1 2
    2 3
     
    Sample Output
    3
    13
     
    Author
    UESTC
     
    题意:根据题目中规定的结算方式,给定n,m的值,求结果。
     
    打表找规律,比赛的时候找到了还是没写出来。。因为有除法还有取模,所以要用到逆元,第一次使用逆元,找了一个模板。
     
    附上代码:
     
     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cmath>
     5 #define ll long long
     6 #define mod 1000000007
     7 using namespace std;
     8 
     9 
    10 ll mat(ll a,ll b)///a^b,结果对mod取膜,b的值很大的时候
    11 {
    12     ll c=1;
    13     if(b==1) return a%mod; ///当b为1时,只剩下最后一个a
    14     else if(b&1)  ///b为奇数
    15         return mat(a,b-1)*a%mod; ///把单独的a拿出来
    16     else ///b为偶数
    17         return mat(a*a%mod,b/2)%mod; ///直接相乘,系数除以2
    18 }
    19 
    20 ll extend_gcd(ll a,ll b,ll &x,ll &y)
    21 {
    22     if(a==0&&b==0) return -1;//无最大公约数
    23     if(b==0){x=1;y=0;return a;}
    24     ll d=extend_gcd(b,a%b,y,x);
    25     y-=a/b*x;
    26     return d;
    27 }
    28 //*********求逆元素*******************
    29 //ax = 1(mod n)
    30 ll mod_reverse(ll a,ll n)
    31 {
    32     ll x,y;
    33     ll d=extend_gcd(a,n,x,y);
    34     if(d==1) return (x%n+n)%n;
    35     else return -1;
    36 }
    37 
    38 ll c(ll n,ll m)
    39 {
    40     ll i,j,t1,t2,ans;
    41     t1=((mat(m,n+1)-1)%mod+mod)%mod;
    42     t2=(m-1)%mod;
    43     return  t1*mod_reverse(t2,mod)%mod;
    44 }
    45 
    46 
    47 int main()
    48 {
    49     int T,n,m;
    50     scanf("%d",&T);
    51     while(T--)
    52     {
    53         scanf("%d%d",&n,&m);
    54         ll ans=c(n,m);
    55         printf("%I64d
    ",ans);
    56     }
    57     return 0;
    58 }
  • 相关阅读:
    scrum
    control.begininvoke
    ChangeBrowsePosition Method
    常见linux命令(表格分类)
    Python 之优先级排序
    Python 之分辨双胞胎:copy(浅拷贝)与 deepcopy(深拷贝)
    字符编码学习总结
    Python 多继承方式及顺序
    AttributeError: module 'datetime' has no attribute 'now' ------解决方法之一
    Python 模块定义、导入、优化详解
  • 原文地址:https://www.cnblogs.com/pshw/p/5741620.html
Copyright © 2011-2022 走看看