2.矩陣翻轉

題解

題目說給的是==已翻轉的==的矩陣,所以我們要從翻轉步驟去逆推原矩陣,因為翻轉恆是翻轉,所以不需要特別處理,但是向右旋轉逆推要變成向左旋轉,這點要特別注意

我們在rev函式裡面去做翻轉的動作,把矩陣從最下方讀到最上方,並且加入out

我們在rec函式裡面去做旋轉的動作,想左旋轉就是把第一列變成第一直排,以此類推

最後輸出原矩陣的長與寬和原矩陣即是答案

AC Code

python

from sys import stdin
r,c,m=map(int,stdin.readline().strip().split())
row=[list(map(int,stdin.readline().strip().split())) for _ in range(r)]
turn=reversed(list(map(int,stdin.readline().strip().split())))
def rev(data):
    out=[]
    for i in range(len(data)-1,-1,-1):
        out.append(data[i])
    return out
def rec(data):
    out=[[0]*len(data) for _ in range(len(data[0]))]
    for j in range(len(data[0])-1,-1,-1):
        for i in range(len(data)):
            out[len(data[0])-j-1][i]=data[i][j]
    return out
for i in turn:
    if i==0:
        row=rec(row)
    elif i==1:
        row=rev(row)
print(len(row),end=" ")
print(len(row[0]))
for i in row:
    print(*i)

C++

#include<bits/stdc++.h>
using namespace std;
vector<vector<int>> rev(const vector<vector<int>>& data){
    vector<vector<int>> out;
    for(int i=data.size()-1;i>=0;i--) out.push_back(data[i]);
    return out;
}
vector<vector<int>> rec(const vector<vector<int>>& data){
    vector<vector<int>> out;
    for(int i=data[0].size()-1;i>=0;i--){
        vector<int> temp;
        for(int j=0;j<data.size();j++){
            temp.push_back(data[j][i]);
        }
        out.push_back(temp);
    }
    return out;
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int r,c,m;
    cin>>r>>c>>m;
    vector<vector<int>> row;
    for(int i=0;i<r;i++){
        vector<int> temp;
        for(int j=0;j<c;j++){
            int x;cin>>x;
            temp.push_back(x);
        }
        row.push_back(temp);
    }
    vector<int> turn;
    for(int i=0;i<m;i++){
        int x;
        cin>>x;
        turn.push_back(x);
    }
    reverse(turn.begin(),turn.end());
    for(auto i:turn){
        if(i==0) row=rec(row);
        else if(i==1) row=rev(row);
    }
    cout<<row.size()<<" "<<row[0].size()<<endl;
    for(const auto& i : row){
        for(int j=0;j<i.size();++j){
            cout<<i[j]<<(j==i.size()-1?"":" ");
        }
        cout<<endl;
    }
}