1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
| #include <bits/stdc++.h>
using namespace std;
string ltrim(const string &); string rtrim(const string &); vector<string> split(const string &);
void helper(vector<vector<int>>& matrix, int r, int c, int ro) { vector<int> bound; int y = matrix.size() - 1 - r, x = matrix[0].size() - 1 - c; for(int i = r; i <= y; i++) bound.push_back(matrix[i][c]); for(int i = c + 1; i <= x; i++) bound.push_back(matrix[y][i]); for(int i = y - 1; i >= r; i--) bound.push_back(matrix[i][x]); for(int i = x - 1; i > c; i--) bound.push_back(matrix[r][i]); int n = bound.size(), idx = n - (ro % n); if(ro % n == 0) return; for(int i = r; i <= y; i++, idx %= n) matrix[i][c] = bound[idx++]; for(int i = c + 1; i <= x; i++, idx %= n) matrix[y][i] = bound[idx++]; for(int i = y - 1; i >= r; i--, idx %= n) matrix[i][x] = bound[idx++]; for(int i = x - 1; i > c; i--, idx %= n) matrix[r][i] = bound[idx++]; } void matrixRotation(vector<vector<int>> matrix, int r) { int n = matrix.size(), m = matrix[0].size(); for(int i = 0; i < min(n,m) / 2; i++) { helper(matrix, i, i, r); } for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { cout<<matrix[i][j]<<" "; } cout<<endl; } }
int main() { string first_multiple_input_temp; getline(cin, first_multiple_input_temp);
vector<string> first_multiple_input = split(rtrim(first_multiple_input_temp));
int m = stoi(first_multiple_input[0]);
int n = stoi(first_multiple_input[1]);
int r = stoi(first_multiple_input[2]);
vector<vector<int>> matrix(m);
for (int i = 0; i < m; i++) { matrix[i].resize(n);
string matrix_row_temp_temp; getline(cin, matrix_row_temp_temp);
vector<string> matrix_row_temp = split(rtrim(matrix_row_temp_temp));
for (int j = 0; j < n; j++) { int matrix_row_item = stoi(matrix_row_temp[j]);
matrix[i][j] = matrix_row_item; } }
matrixRotation(matrix, r);
return 0; }
string ltrim(const string &str) { string s(str);
s.erase( s.begin(), find_if(s.begin(), s.end(), not1(ptr_fun<int, int>(isspace))) );
return s; }
string rtrim(const string &str) { string s(str);
s.erase( find_if(s.rbegin(), s.rend(), not1(ptr_fun<int, int>(isspace))).base(), s.end() );
return s; }
vector<string> split(const string &str) { vector<string> tokens;
string::size_type start = 0; string::size_type end = 0;
while ((end = str.find(" ", start)) != string::npos) { tokens.push_back(str.substr(start, end - start));
start = end + 1; }
tokens.push_back(str.substr(start));
return tokens; }
|