MnZn求条

Equiseca 发表于 8天前 · 关联问题 Matrix

有没有人能压缩一下输出, 四种压成一种, 不用宏, 现在看起来不太美观

#include <bits/stdc++.h> #define int long long using namespace std; struct Mat { vector<vector<int>> dat; int situ; // -1 0 1 2 -> 0 1 2 3 Mat(auto dat, int situ) : dat(dat), situ(situ) {} friend ostream &operator<< (ostream& os, const Mat &a) { int sz = a.dat.size(); switch (a.situ) { case 0: { for (int i = 0; i < sz; ++i) for (int j = 0; j < sz; ++j) os << a.dat[i][j] << " \n"[j == sz - 1]; break; } case 1: { for (int j = 0; j < sz; ++j) for (int i = sz - 1; i >= 0; --i) os << a.dat[i][j] << " \n"[i == 0]; break; } case 2: { for (int i = sz - 1; i >= 0; --i) for (int j = sz - 1; j >= 0; --j) os << a.dat[i][j] << " \n"[j == 0]; break; } case 3: { for (int j = sz - 1; j >= 0; --j) for (int i = 0; i < sz; ++i) os << a.dat[i][j] << " \n"[i == sz - 1]; break; } } return os; } }; void solve() { int n, m; cin >> n >> m; vector<vector<int>> dat(n, vector<int>(n, 0)); for (auto &row : dat) for (auto &v : row) cin >> v; Mat a(dat, 0); for (int _ = 1, opt; _ <= m; ++_) { cin >> opt; if (opt == 1) a.situ = (a.situ + 1) % 4; if (opt == 2) a.situ = (a.situ + 3) % 4; if (opt == 3) a.situ = (a.situ + 2) % 4; cout << a << "\n"; } } signed main() { std::cin.tie(nullptr) -> sync_with_stdio(false); // int t; cin >> t; while (t--) solve(); }