乙個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可以容易發現2個規律:16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
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 ...