P4924 [1007]魔法少女小Scarlet 題解
阿新 • • 發佈:2021-07-07
題目描述
\(Scarlet\)最近學會了一個數組魔法,她會在n*n
二維陣列上將一個奇數階方陣按照順時針或者逆時針旋轉90°
,
首先,\(Scarlet\)會把\(1\)到\(n^2\)的正整數按照從左往右,從上至下的順序填入初始的二維陣列中,然後她會施放一些簡易的魔法。
\(Scarlet\)既不會什麼分塊特技,也不會什麼\(Splay\)套\(Splay\),她現在提供給你她的魔法執行順序,想讓你來告訴她魔法按次執行完畢後的二維陣列。
輸入格式
第一行兩個整數\(n\),\(m\),表示方陣大小和魔法施放次數。
接下來\(m\)行,每行4個整數\(x,y,r,z\),表示在這次魔法中,Scarlet會把以第\(x\)
輸出格式
輸出\(n\)行,每行\(n\)個用空格隔開的數,表示最終所得的矩陣
輸入輸出樣例
輸入
5 4
2 2 1 0
3 3 1 1
4 4 1 0
3 3 2 1
輸出
5 10 3 18 15
4 19 8 17 20
1 14 23 24 25
6 9 2 7 22
11 12 13 16 21
說明/提示
對於50%的資料,滿足\(r=1\)
對於100%的資料\(1<= n,m<=500\)
解題思路:
1、二維陣列逆時針旋轉90度
分析上圖:
數字:\(1\),原座標:\(a[1][1]\)
數字:\(2\),原座標:\(a[1][2]\),新座標:\(a[2][1]\)
數字:\(3\),原座標:\(a[1][3]\),新座標:\(a[1][1]\)
數字:\(4\),原座標:\(a[2][1]\),新座標:\(a[3][2]\)
數字:\(5\),原座標:\(a[2][2]\),新座標:\(a[2][2]\)
數字:\(6\),原座標:\(a[2][3]\),新座標:\(a[1][2]\)
...
結論:
1、原來的行,變成了現在的列,即\(i->j\),這個很顯然。
2、但是列不是這樣的簡單變成行,而是\(1->3,2->2,3->1,1->3,2->2,3->1\) ,這是啥規律呢?就是相加的和是\(n+1\)嘛,所以 \(j->(n+1-i)\)