zoukankan      html  css  js  c++  java
  • nuc 第二届山西省大学生程序设计大赛 魔力手环

    problem

    很妙啊……发现状态转移矩阵每一行都可以由上一行平移得到,每次只算第一行然后平移,(O(n^3)) 就变成了 (O(n^2))

    #include <iostream>
    #include <cstdio>
    using namespace std;
    int n, k;
    struct Matrix{
    	int num[205][205];
    	Matrix operator*(const Matrix &x)const{
    		Matrix re;
    		for(int i=1; i<=n; i++){
    			re.num[1][i] = 0;
    			for(int j=1; j<=n; j++)
    				re.num[1][i] = (re.num[1][i]+num[1][j]*x.num[j][i])%100;
    		}
    		for(int i=2; i<=n; i++)
    			for(int j=1; j<=n; j++)
    				re.num[i][j] = re.num[i-1][(j-2+n)%n+1];
    		return re;
    	}
    }dan, yua, zhu;
    int main(){
    	cin>>n>>k;
    	for(int i=1; i<=n; i++){
    		scanf("%d", &yua.num[1][i]);
    		dan.num[i][i] = 1;
    		zhu.num[i][i] = zhu.num[i][(i-2+n)%n+1] = 1;
    	}
    	while(k){
    		if(k&1)	dan = dan * zhu;
    		zhu = zhu * zhu;
    		k >>= 1;
    	}
    	yua = yua * dan;
    	for(int i=1; i<=n; i++)
    		printf("%d ", yua.num[1][i]);
    	printf("
    ");
    	return 0;
    }
    
  • 相关阅读:
    DHCP服务搭建
    JumpServer跳板机
    PXE
    DNS
    MySQL
    企业级LNMP分离式部署
    MHA-Atlas-MySQL高可用集群2
    MHA-Atlas-MySQL高可用集群
    备份全网服务器数据
    FTP
  • 原文地址:https://www.cnblogs.com/poorpool/p/8856790.html
Copyright © 2011-2022 走看看