矩阵快速幂

zoj 3497 Mistwald
矩阵乘法,但是要先把点从二维变成一维,然后要特殊处理一下终点情况,走到终点就不能再走了。

#include   
#include   
#include   
using namespace std;  
int mat[30][30], g[30][30], res[30][30];  
int m, n, nm;  
void MatPow(int m1[][30],int m2[][30]){
    int t[30][30];
    for(int i=0;i>T;
    char s[100];
    int X[5],Y[5];
    while(T--){
        cin>>m>>n;
        nm=n*m;
        memset(mat,0,sizeof(mat));
        for(int i=0;i>Q;
        while(Q--){
            cin>>p;
            if(!p){
                if(nm==1) cout<<"True\\\\n";
                else  cout<<"False\\\\n";
                continue;
            }
            bool ok=true;
            memcpy(g,mat,sizeof(g));
            while(p){
                if(p&1){
                    if(ok){
                        memcpy(res,g,sizeof(g));
                        ok=false;
                    }
                    else 
                        MatPow(res,g);
                }
                p>>=1;
                MatPow(g,g);
            }
            int ans=0;
            for(int i=0;i

你可能感兴趣的:(矩阵快速幂)