NOIP普及組2014第三題 螺旋矩陣

2022-08-22 15:48:13 字數 1260 閱讀 6413

題目描述

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

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

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

1 2 3 4

12 13 14 5

11 16 15 6

10 9 8 7

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

輸入格式:

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

輸出格式:

輸出共一行,包含乙個整數,表示相應矩陣中第i行第j列的數。

輸入樣例

4 2 3

輸出樣例

14【資料說明】

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

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

其實本題很簡單,你只要打幾個螺旋矩陣,然後就可以找出規律,例如:

1 2 3

8 9 4

7 6 5

然後我們把n=3的矩陣嵌入到n=5的矩陣裡面:

1 2 3 4 5

16 1 2 3 6

15 8 9 4 7

14 7 6 5 8

13 12 11 10 9

對比原來的n=5的中間的內矩陣:

17 18 19

24 25 26

23 22 21

天啊,你有沒有發現其實這就是n=3的矩陣每個數加上16(我們稱為k)!

巧合?不信的話你可以再打出n=2和n=4的矩陣作對比,你就會發現k=n*4-4

內矩陣搞定了,你就可以發現外矩陣也有規律:

當x1或者yn時,結果就是x+y-1

當xn或者y1時,結果就是4*n-x-y-1

開始我本來想用dp的,可是資料不允許.....無奈之下只好用遞迴了。。。

附**:

#include#include#includeusing namespace std;

int turn(int n,int x,int y)

}int main()

NOIP2005 普及組複賽 第三題 採藥

題目描述description 辰辰是個天資聰穎的孩子,他的夢想是成為世界上最偉大的醫師。為此,他想拜附近最有威望的醫師為師。醫師為了判斷他的資質,給他出了乙個難題。醫師把他帶到乙個到處都是草藥的山洞裡對他說 孩子,這個山洞裡有一些不同的草藥,採每一株都需要一些時間,每一株也有它自身的價值。我會給你...

飛彈攔截(NOIP2010 普及組第三題)

經過11 年的韜光養晦,某國研發出了一種新的飛彈攔截系統,凡是與它的距離不超過其工作半徑的飛彈都能夠被它成功攔截。當工作半徑為0 時,則能夠攔截與它位置恰好相同的飛彈。但該飛彈攔截系統也存在這樣的缺陷 每套系統每天只能設定一次工作半徑。而當天的使用代價,就是所有系統工作半徑的平方和。某天,雷達捕捉到...

NOIP2002 普及組複賽 第三題 選數

題目描述description 已知 n 個整數 x1,x2,xn,以及乙個整數 k k n 從 n 個整數中任選 k 個整數相加,可分別得到一系列的和。例如當 n 4,k 3,4 個整數分別為 3,7,12,19 時,可得全部的組合與它們的和為 3 7 12 22 3 7 19 29 7 12 1...