題目描述
乙個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開始我本來想用dp的,可是資料不允許.....無奈之下只好用遞迴了。。。當xn或者y1時,結果就是4*n-x-y-1
附**:
#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...