Acwing 3534. 矩阵幂 && 3535. C翻转

3534. 矩阵幂 - AcWing题库

思路:模拟,当然,k次幂可以用快速幂优化,这里懒了

#include 
#include 
using namespace std;

vector> mul(int n, vector>& a, vector>& b) {
    vector> tmp(n, vector(n, 0));
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < n; j++) {
            int cur = 0;
            for(int k = 0; k < n; k++) {
                cur += a[i][k] * b[k][j];
            }
            tmp[i][j] = cur;
        }
    }
    return tmp;
}

int main() {
    int n, k;
    cin >> n >> k;

    vector> g(n, vector(n));

    for(int i = 0; i < n; i++) {
        for(int j = 0; j < n; j++) {
            cin >> g[i][j];
        }
    }
    vector> res = g;

    while(--k) {
        res = mul(n, g, res);
    }

    for(int i = 0; i < n; i++) {
        for(int j = 0; j < n; j++) {
            cout << res[i][j] << " ";
        }
        cout << endl;
    }

    return 0;
}

3535. C翻转 - AcWing题库 

思路: 

顺时针旋转[i][j]-->[c+j-d][d+b+c-i-1]  
逆时针旋转[i][j]-->[d+b+c-j-1][d+i-c]

#include
using namespace std;
int pre[6][6];
int pro[6][6];
int main(){

    for(int i=1;i<=5;i++){
        for(int j=1;j<=5;j++){
            cin>>pre[i][j];
        }
    }

    int a,b,c,d;
    cin>>a>>b>>c>>d;
    int n=b;
    if(a==1){

        for(int i=c;i<=c+b-1;i++){
            for(int j=d;j<=d+b-1;j++){
                pro[c+j-d][d+b+c-i-1]=pre[i][j];
            }
        }

        for(int i=c;i<=c+b-1;i++){
            for(int j=d;j<=d+b-1;j++){
                pre[i][j]=pro[i][j];
            }
        }

    }else if(a==2){
        for(int i=c;i<=c+b-1;i++){
            for(int j=d;j<=d+b-1;j++){
                pro[d+b+c-j-1][i+d-c]=pre[i][j];
            }
        }

        for(int i=c;i<=c+b-1;i++){
            for(int j=d;j<=d+b-1;j++){
                pre[i][j]=pro[i][j];
            }
        }
    }

    for(int i=1;i<=5;i++){
        for(int j=1;j<=5;j++){
            cout<

你可能感兴趣的:(矩阵,c语言,算法)