zoukankan      html  css  js  c++  java
  • luogu3390 矩阵快速幂

    题目

    luogu3390

    代码

    #include <bits/stdc++.h>
    using namespace std;
    #define ll long long
    const int N = 205;
    const ll mod = 1e9 + 7;
    
    ll n, k;
    
    struct node
    {
    	ll mp[N][N];
    	void clear() {memset(mp, 0, sizeof(mp));}
    }x, ans;
    
    node operator * (node a, node b)
    {
    	node t; t.clear();
    	for(int i = 1; i <= n; i++)
    		for(int j = 1; j <= n; j++)
    			for(int k = 1; k <= n; k++) t.mp[i][j] = (t.mp[i][j] + a.mp[i][k] * b.mp[k][j]) % mod;
    	return t;
    }
    
    void ksm()
    {
    	for(int i = 1; i <= n; i++) ans.mp[i][i] = 1;
    	while(k)
    	{
    		if(k & 1) ans = ans * x;
    		x = x * x; k >>= 1;
    	}
    }
    
    int main()
    {
    	cin >> n >> k;
    	x.clear(); ans.clear();
    	for(int i = 1; i <= n; i++)
    		for(int j = 1; j <= n; j++) cin >> x.mp[i][j];
    	ksm();
    	for(int i = 1; i <= n; i++)
    	{
    		for(int j = 1; j <= n; j++) cout << ans.mp[i][j] << " ";
    		cout << endl;
    	}
    	return 0;
    }
  • 相关阅读:
    Spoj 2798 Qtree3
    [HAOI2015]树上操作
    Grass Planting
    [ZJOI2008] 树的统计Count
    Spoj375 Qtree--树链剖分
    [HNOI2012]永无乡
    雨天的尾巴
    temp
    线段树动态开点之逆序对
    线段树动态开点
  • 原文地址:https://www.cnblogs.com/XYZinc/p/7802195.html
Copyright © 2011-2022 走看看