zoukankan      html  css  js  c++  java
  • luogu3193 [HNOI2008]GT考试

    there

    #include <iostream>
    #include <cstdio>
    using namespace std;
    int n, m, mod, nxt[25], too[25][15];
    char ss[25];
    struct Matrix{
    	int num[25][25];
    	Matrix operator*(const Matrix &u)const{
    		Matrix re;
    		for(int i=0; i<m; i++)
    			for(int j=0; j<m; j++){
    				re.num[i][j] = 0;
    				for(int k=0; k<m; k++)
    					re.num[i][j] = (re.num[i][j] + num[i][k]*u.num[k][j]) % mod;
    			}
    		return re;
    	}
    }zhu, yua, dan;
    void mknxt(){
    	int i=0, j;
    	j = nxt[0] = -1;
    	while(i<m){
    		if(j==-1 || ss[i]==ss[j])	nxt[++i] = ++j;
    		else	j = nxt[j];
    	}
    }
    void mktoo(){
    	for(int i=0; i<m; i++)
    		for(int j=0; j<=9; j++){
    			too[i][j] = ss[i]==j+'0'?i+1:too[max(nxt[i],0)][j];
    			zhu.num[i][too[i][j]]++;
    		}
    }
    int main(){
    	cin>>n>>m>>mod;
    	scanf("%s", ss);
    	mknxt();
    	mktoo();
    	for(int i=0; i<m; i++)
    		dan.num[i][i] = 1;
    	yua.num[0][0] = 1;
    	while(n){
    		if(n&1)	dan = dan * zhu;
    		zhu = zhu * zhu;
    		n >>= 1;
    	}
    	yua = yua * dan;
    	int ans=0;
    	for(int i=0; i<m; i++)
    		ans = (ans + yua.num[0][i]) % mod;
    	cout<<ans<<endl;
    	return 0;
    }
    
  • 相关阅读:
    重构技巧 引入Null对象
    python yield
    todo
    Python 函数式编程学习
    Python 修饰器
    socket
    Exception、RuntimeException
    设计模式
    线程池
    VMware异常关闭后再次启动提示“以独占方式锁定此配置文件失败”!!!
  • 原文地址:https://www.cnblogs.com/poorpool/p/8830078.html
Copyright © 2011-2022 走看看