P4924 [1007]魔法少女小Scarlet
阿新 • • 發佈:2022-03-10
題目連結
題目思路
順時針轉是第\(i\)行第\(j\)列的數字轉移到第\(j\)行倒數第\(i\)列
\(temp[n - m + j][n + m - i] = g[i][j]\)
逆時針轉是第\(i\)行第\(j\)列的數字轉移到倒數第\(j\)行第\(i\)列
\(temp[n + m - j][m - n + i] = g[i][j]\)
題目程式碼
#include <iostream> #include <algorithm> using namespace std; const int N = 510; int g[N][N], temp[N][N]; int n, m, t; int main() { cin >> n >> m; for(int i = 1; i <= n; i ++ ) for(int j = 1; j <= n; j ++ ) g[i][j] = ++ t; while(m -- ) { int x, y, r, z; cin >> x >> y >> r >> z; if(z == 0) { for(int i = x - r; i <= x + r; i ++ ) for(int j = y - r; j <= y + r; j ++ ) temp[x - y + j][x + y - i] = g[i][j]; for(int i = x - r; i <= x + r; i ++ ) for(int j = y - r; j <= y + r; j ++ ) g[i][j] = temp[i][j]; } else { for(int i = x - r; i <= x + r; i ++ ) for(int j = y - r; j <= y + r; j ++ ) temp[x + y - j][y - x + i] = g[i][j]; for(int i = x - r; i <= x + r; i ++ ) for(int j = y - r; j <= y + r; j ++ ) g[i][j] = temp[i][j]; } } for(int i = 1; i <= n; i ++ ) { for(int j = 1; j <= n; j ++ ) cout << g[i][j] << ' '; puts(""); } return 0; }