洛谷 P2239 螺旋矩陣 數學

2021-09-25 15:23:33 字數 1281 閱讀 5630

乙個nn行nn列的螺旋矩陣可由如下方法生成:

從矩陣的左上角(第11行第11列)出發,初始時向右移動;如果前方是未曾經過的格仔,則繼續前進,否則右轉;重複上述操作直至經過矩陣中所有格仔。根據經過順序,在格仔中依次填入1, 2, 3, ... , n1,2,3,...,n,便構成了乙個螺旋矩陣。2

下圖是乙個n = 4n=4 時的螺旋矩陣。

1     2     3     4

12 13 14 5

11 16 15 6

10 9 8 7

現給出矩陣大小nn以及ii和jj,請你求出該矩陣中第ii行第jj列的數是多少。

(本題目為2014noip普及t3)

共一行,包含三個整數 n,i,jn,i,j,每兩個整數之間用乙個空格隔開,分別表示矩陣大小、待求的數所在的行號和列號。

乙個整數,表示相應矩陣中第ii行第jj列的數。

輸入 #1

4 2 3
輸出 #1

14
【資料說明】

對於50\%50%的資料,1 ≤ n ≤ 1001≤n≤100;

對於100\%100%的資料,1 ≤ n ≤ 30,000,1 ≤ i ≤ n,1 ≤ j ≤ n1≤n≤30,000,1≤i≤n,1≤j≤n。

找規律的題目,然後通過遞迴實現。

對於乙個5*5的矩陣:

1    2    3    4    5

16  17  18  19  6

15  24  25  20  7

14  23  22  21  8

13  12  11  10  9

可以容易發現2個規律:

1.對於第1行的數字,第j列的值是j;

2.對於第n列的數字,第i行的值是i+n-1;

接下來要找到第1列和第n行的數字的規律,就有點困難了:

3.對於第n行的數字,第j列的值是3*n-2-j+1;

4.對於第1列的數字,第i行的值是4*n-4-i+2。

換成6*6的矩陣結論依然成立,所以考慮用遞迴來寫這題。

#include #include using namespace std;

int n,inx,iny,s;

int dfs(int x,int y,int n)

signed main()

洛谷P2239 螺旋矩陣

題目鏈結 直接看題 一看就很數學 我們不妨來畫圖 畫出幾個矩陣,找他們的關係 然後發現 當i 1時,對應的值就是j所對應的值 當i n時,所對應的值就是3 n 2 j 1 當j 1時,所對應的值是4 n 2 i 當j n時,對應的值是n x 1。然後對於這個很多很多層的矩陣,我們可以對其進行剝層,每...

洛谷 2239 螺旋矩陣

翻了翻題解,發現我的這個方法好像並沒有被寫過,也許是這個方法太菜了,但是還是可以ac的。首先呢 1 n 30,000.暴力就別想了,最多50分 於是就開始在暴力的基礎上找方法,無意發現,如果我們開始先將矩陣一層一層的剝開,直到目標位置在新矩陣的最外層是停止。此時最壞情況,目標點在30000x3000...

洛谷P5087 數學

題目鏈結 思路 乙個很容易想的dp 設 f i,jf fi,j 表示在前 i ii 個數中取 j jj 個所得到的乘積。則 f i,j fi 1,j fi 1,j 1 ai i 0,j 0 f f f a i quad i 0,j 0 fi,j fi 1 j fi 1 j 1 ai i 0,j 0 ...