zoukankan      html  css  js  c++  java
  • poj 3233 矩阵幂取模

    #include<iostream>
    using namespace std;
    struct node{int p[100][100];};
    node a,b;
    int num,n,qq;
    node cheng(node a,node b)
    {
    	node c;
    	int j,i,w,k;
    	for(i=0;i<num;i++)
    		for(j=0;j<num;j++)
    		{
    			int w=0;
    			//c.p[i][j]=0;
    			for(k=0;k<num;k++)
    				w+=(a.p[i][k]*b.p[k][j])%qq;
    			c.p[i][j]=w%qq;
    		}
    	return c;
    }
    
    void solve(int m)
    {
    	while(m)
    	{
    		if(m%2==1)
    			b=cheng(a,b);
    		a=cheng(a,a);
    		m/=2;
    	}
    }
    
    int main()
    {
    	int i,j,k,m;
    	while(~scanf("%d",&n))
    	{
    		scanf("%d %d",&m,&qq);
    		num=n*2;
    		for(i=0;i<num;i++)
    			for(j=0;j<num;j++)
    				a.p[i][j]=0;
    		for(i=0;i<n;i++)
    			for(j=0;j<n;j++)
    				scanf("%d",&a.p[i][j]);
    			for(i=0;i<n;i++)
    				a.p[i][i+n]=a.p[i+n][i+n]=1;
    		for(i=0;i<num;i++)
    			for(j=0;j<num;j++)
    			{
    				if(i==j)
    					b.p[i][j]=1;
    				else b.p[i][j]=0;
    			}
    			solve(m+1);
    			for(i=0;i<n;i++)
    			{
    				for(j=0;j<n;j++)
    				{
    					if(i==j)
    					{
    						b.p[i][j+n]-=1;    //若该值取余后为0 再减一 就成负数了  这一细节我一直都没有发现  wa后 测出确实有负数  找了好久的错误 我还以为是程序别的地方有问题 。。直到
    						if(b.p[i][j+n]<0)// 看了 奖金的博客
    							b.p[i][j+n]+=qq;
    
    					} 	
    						if(j==n-1)
    							printf("%d\n",b.p[i][j+n]);
    						else
    							printf("%d ",b.p[i][j+n]);
    				}
    				
    			}
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    Lab BGP RTBH
    Lab BGP ORF
    Lab BGP Maximum-Prefix
    Lab BGP 路由翻动(route flaps)
    Lab BGP Peer-Group
    Lab BGP Dampening
    BGP Dampening Cyrus
    BGP进程工作步骤
    5、为什么域名解析用UDP协议?6、为什么区域传送用TCP协议?
    3、你知道DNS是什么?4、DNS的工作原理?
  • 原文地址:https://www.cnblogs.com/assult/p/3109010.html
Copyright © 2011-2022 走看看