zoukankan      html  css  js  c++  java
  • 模板

    写了一个矩阵类,不用到处抄。默认是int矩阵。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    
    const int MAXN=26;
    struct Matrix {
        int m[MAXN][MAXN];
        Matrix() {}
        void clear() {
            memset(m,0,sizeof(m));
        }
    
        void init(int m[MAXN][MAXN]) {
            for(int i=0; i<MAXN; ++i) {
                for(int j=0; j<MAXN; ++j)
                    this->m[i][j]=m[i][j];
            }
        }
    
        Matrix operator+(Matrix ma) {
            Matrix res;
            res.clear();
            for(int i=0; i<MAXN; ++i) {
                for(int j=0; j<MAXN; ++j)
                    res.m[i][j]=m[i][j]+ma.m[i][j];
            }
            return res;
        }
    
        Matrix operator*(Matrix ma) {
            Matrix res;
            res.clear();
            for(int i=0; i<MAXN; ++i) {
                for(int j=0; j<MAXN; ++j)
                    for(int k=0; k<MAXN; ++k)
                        res.m[i][j]+=m[i][k]*ma.m[k][j];
            }
            return res;
        }
    
        Matrix qpow(ll n) {
            Matrix res;
            res.clear();
            for(int i=0; i<MAXN; ++i)
                res.m[i][i]=1;
            Matrix x=*this;
            for(;n;n>>=1){
                if(n&1)
                    res=res*x;
                x=x*x;
            }
            return res;
        }
    
        void show(){
            for(int i=0; i<MAXN; ++i) {
                for(int j=0; j<MAXN; ++j)
                    printf("%d",m[i][j]);
                printf("
    ");
            }
            printf("
    ");
        }
    };
    
    char s[27];
    char t[1001];
    
    int main() {
    #ifdef Yinku
        freopen("Yinku.in","r",stdin);
    #endif // Yinku
        ll n;
        while(~scanf("%lld",&n)) {
            scanf("%s%s",s,t);
            Matrix A;
            A.clear();
            for(int i=0;i<26;i++){
                A.m[i][s[i]-'a']=1;
            }
            Matrix An=A.qpow(n);
            for(int i=0;i<26;i++){
                for(int j=0;j<26;j++){
                    if(An.m[i][j]){
                        //printf("%c->%c
    ",'a'+i,'a'+j);
                        s[i]='a'+j;
                    }
                }
            }
            for(int i=0;t[i]!='';i++){
                t[i]=s[t[i]-'a'];
            }
            puts(t);
        }
        return 0;
    }
    
  • 相关阅读:
    PAT顶级 1024 Currency Exchange Centers (35分)(最小生成树)
    Codeforces 1282B2 K for the Price of One (Hard Version)
    1023 Have Fun with Numbers (20)
    1005 Spell It Right (20)
    1092 To Buy or Not to Buy (20)
    1118 Birds in Forest (25)
    1130 Infix Expression (25)
    1085 Perfect Sequence (25)
    1109 Group Photo (25)
    1073 Scientific Notation (20)
  • 原文地址:https://www.cnblogs.com/Yinku/p/11024654.html
Copyright © 2011-2022 走看看