zoukankan      html  css  js  c++  java
  • hdu 3658 How many words

    思路:

    构造矩阵,矩阵快速幂!!!

    代码如下:

     1 #include<cstdio>
     2 #include<vector>
     3 #include<cmath>
     4 #include<iostream>
     5 #include<cstring>
     6 #define ll __int64
     7 #define mod 1000000007
     8 using namespace std;
     9 int let[100];
    10 struct ma
    11 {
    12     ll a[60][60];
    13 }A,B;
    14 ll sum(ma a)
    15 {
    16     ll ans=0;
    17     for(int i=0;i<52;i++)
    18         for(int j=0;j<52;j++)
    19             ans=(ans+a.a[i][j])%mod;
    20     return ans;
    21 }
    22 void init()
    23 {
    24     int i,j;
    25     for(i='a';i<='z';i++){
    26         let[i-'a']=i;
    27         let[i-'a'+26]=i-'a'+'A';
    28     }
    29     for(i=0;i<52;i++)
    30     for(j=0;j<52;j++){
    31         if(abs(let[i]-let[j])<=32) A.a[i][j]=1;
    32         if(abs(let[i]-let[j])<32) B.a[i][j]=1;
    33     }
    34 }
    35 ma mul(ma a,ma b)
    36 {
    37     ma ans;
    38     for(int i=0;i<52;i++)
    39     for(int j=0;j<52;j++){
    40         ans.a[i][j]=0;
    41         for(int k=0;k<52;k++)
    42             ans.a[i][j]=(ans.a[i][j]+a.a[i][k]*b.a[k][j])%mod;
    43     }
    44     return ans;
    45 }
    46 ma pows(ma a,int b)
    47 {
    48     ma ans;
    49     for(int i=0;i<52;i++)
    50         for(int j=0;j<52;j++)
    51             ans.a[i][j]=(i==j);
    52     while(b){
    53         if(b&1) ans=mul(ans,a);
    54         b>>=1;
    55         a=mul(a,a);
    56     }
    57     return ans;
    58 }
    59 int main()
    60 {
    61     init();
    62     int m,t;
    63     scanf("%d",&t);
    64     while(t--){
    65         scanf("%d",&m);
    66         ll res=sum(pows(A,m-1))-sum(pows(B,m-1));
    67         if(res<0) res=(res%mod+mod)%mod;
    68         printf("%I64d
    ",res);
    69     }
    70     return 0;
    71 }
    View Code

  • 相关阅读:
    试述软件的概念和特点?软件复用的含义?构件包括哪些?
    Spring Security基本用法
    java中跳出循环的方式
    cookie和session区别
    spring中类型注解下的bean的加载顺序
    常见的异常
    aop使用场景
    缓存类似于redis
    旧版redis使用
    获取rdis的几种方式
  • 原文地址:https://www.cnblogs.com/xin-hua/p/3303509.html
Copyright © 2011-2022 走看看