zoukankan      html  css  js  c++  java
  • bzoj1008题解

    【题意分析】

      求长度为n,元素大小在[1,m]∩N的序列中,有多少个序列中存在相同的相邻元素。

    【解题思路】

      小学奥数题。。

      总序列数:S=mn

      不存在相同的相邻元素的序列数:T=m*(m-1)n-1(第一个元素有m种取法,剩下的每个元素都不能跟左边的元素相同,都有m-1种取法)

      故ans=S-T=mn-m*(m-1)n-1。复杂度O(log2n)。

    【参考代码】

      我还不知道Py时写的代码。。

      1 #include<cmath>
      2 #include<cstdio>
      3 #include<cstdlib>
      4 #include<ctime>
      5 #define REP(I,start,end) for(int I=start;I<=end;I++)
      6 #define PER(I,start,end) for(int I=start;I>=end;I--)
      7 #define REPs(I,start,end,step) for(int I=start;I<=end;I+=step)
      8 #define PERs(I,start,end,step) for(int I=start;I>=end;I-=step)
      9 #define maxint 32767
     10 #define maxlongint 2147483647
     11 #define MOD 100003ll
     12 template<typename integer> inline bool even(integer n)
     13 {
     14     return ~n&1;
     15 }
     16 template<typename integer> inline integer exgcd(integer a,integer b,integer &x,integer &y)
     17 {
     18     if(!a&&!b)
     19         return -1;
     20     if(!b)
     21     {
     22         x=1;
     23         y=0;
     24         return a;
     25     }
     26     integer d=exgcd(b,a%b,y,x);
     27     y-=a/b*x;
     28     return d;
     29 }
     30 template<typename integer> inline integer fact(integer n)
     31 {
     32     integer result=integer(1);
     33     REP(i,1,n)
     34         result*=i;
     35     return result;
     36 }
     37 template<typename Float> inline bool fequals(Float A,Float B,Float eps=1e-9)
     38 {
     39     return fabs(A-B)<eps;
     40 }
     41 template<typename integer> inline integer gcd(integer A,integer B)
     42 {
     43     integer result=A;
     44     while(B)
     45     {
     46         A=B;
     47         B=result%B;
     48         result=A;
     49     }
     50     return result;
     51 }
     52 template<typename integer> inline integer sqr(integer n)
     53 {
     54     return n*n;
     55 }
     56 template<typename base_type,typename exp_type> inline base_type PowerMod(base_type Base,exp_type Exp,base_type Mod)
     57 {
     58     bool* sav=new bool[int(log(Exp)/log(2))+1];
     59     int tot=0;
     60     base_type result=base_type(1),baser=Base%Mod;
     61     exp_type tmp=Exp;
     62     while(tmp)
     63     {
     64         sav[tot++]=tmp&1;
     65         tmp>>=1;
     66     }
     67     while(tot)
     68     {
     69         result=sqr(result)%Mod;
     70         if(sav[--tot])
     71             result=result*baser%Mod;
     72     }
     73     delete []sav;
     74     return result;
     75 }
     76 template<typename input_type,typename return_type> inline return_type Lucas(input_type m,input_type n,return_type Mod)
     77 {
     78     return_type *_fact=new return_type[Mod+1],result=_fact[1]=return_type(1);
     79     REP(i,2,Mod)
     80         _fact[i]=_fact[i-1]*i%Mod;
     81     while(m&&n)
     82     {
     83         return_type _m=m%Mod,_n=n%Mod;
     84         if(_m<_n)
     85             return return_type(0);
     86         result=result*_fact[_m]*PowerMod(_fact[_n]*_fact[_m-_n]%Mod,Mod-2,Mod)%Mod;
     87         m/=Mod;
     88         n/=Mod;
     89     }
     90     delete []_fact;
     91     return result;
     92 }
     93 template<typename integer> inline bool Miller_Rabin(integer n,unsigned times)
     94 {
     95     if(n<4)
     96         return n>=0&&n<2;
     97     srand(unsigned(time(NULL)));
     98     int two=0;
     99     integer rest=n-1;
    100     while(even(rest))
    101     {
    102         two++;
    103         rest>>=1;
    104     }
    105     while(times--)
    106     {
    107         integer y=PowerMod(rand()%(n-3)+2,rest,n);
    108         if(y==1||y==n-1)
    109             return true;
    110         int j=two;
    111         while(j--)
    112         {
    113             y=sqr(y)%n;
    114             if(y==1||y==n-1)
    115                 break;
    116         }
    117         if(y!=n-1)
    118             return false;
    119     }
    120     return true;
    121 }
    122 template<typename integer> inline integer mod_reverse(integer a,integer n)
    123 {
    124     integer x,y,d=exgcd(a,n,x,y);
    125     if(d==1)
    126         return NMod(x,n);
    127     else
    128         return -1;
    129 }
    130 template<typename int1,typename int2> inline int2 NMod(int1 A,int2 B)
    131 {
    132     return (A%B+B)%B;
    133 }
    134 template<typename integer> inline bool odd(integer n)
    135 {
    136     return n&1;
    137 }
    138 template<typename base_type,typename exp_type> inline base_type power(base_type Base,exp_type Exp)
    139 {
    140     bool* sav=new bool[log(Exp)/log(2)+1];
    141     int tot=0;
    142     base_type result=base_type(1);
    143     exp_type tmp=Exp;
    144     while(tmp)
    145     {
    146         sav[tot++]=tmp&1;
    147         tmp>>=1;
    148     }
    149     while(tot)
    150     {
    151         result=sqr(result);
    152         if(sav[--tot])
    153             result=result*Base;
    154     }
    155     delete []sav;
    156     return result;
    157 }
    158 template<typename integer> inline bool prime(integer n)
    159 {
    160     REP(i,2,sqrt(n))
    161         if(n%i==0)
    162             return false;
    163     return true;
    164 }
    165 template<typename int1,typename int2> inline int1 ZnDiv(int1 A,int2 B)
    166 {
    167     return (A+B)/B-1;
    168 }
    169 template<typename int1,typename int2> inline int2 ZpMod(int1 A,int2 B)
    170 {
    171     return NMod(A-1,B)+1;
    172 }
    173 //===========================================Header Template==========================================
    174 long long m,n;
    175 int main()
    176 {
    177     scanf("%lld%lld",&m,&n);
    178     m%=MOD;
    179     printf("%lld
    ",NMod(PowerMod(m,n,MOD)-PowerMod(m-1,n-1,MOD)*m%MOD,MOD));
    180     return 0;
    181 }
    View Code

      。。再来看看Py。。

     1 AwD=100003
     2 
     3 def mpow(x,y):
     4     ret,bas,i=1,x%AwD,y
     5     while i:
     6         if i&1:
     7             ret=ret*bas%AwD
     8         bas=bas*bas%AwD
     9         i>>=1
    10     return ret
    11 
    12 if __name__=="__main__":
    13     argv=raw_input().split()
    14     m,n=int(argv[0]),int(argv[1])
    15     print (mpow(m,n)-m*mpow(m-1,n-1))%AwD
    View Code

    QAQ

    We Secure, We Contain, We Protect.
  • 相关阅读:
    spring读书笔记----Quartz Trigger JobStore出错解决
    Linux:Ubuntu16.04下创建Wifi热点
    Java:IDEA下使用JUNIT
    MYSQL:基础—存储过程
    StackExchange.Redis加载Lua脚本进行模糊查询的批量删除和修改
    EFCore执行Sql语句的方法:FromSql与ExecuteSqlCommand
    .NET Core配置文件加载与DI注入配置数据
    ASP.NET Core实现OAuth2.0的AuthorizationCode模式
    CSS实现的几款不错的菜单栏
    开发VS2008 AddIn 入门Sample
  • 原文地址:https://www.cnblogs.com/spactim/p/6426141.html
Copyright © 2011-2022 走看看