Vijos P1913 螺旋矩陣(模擬)

2021-07-22 06:19:31 字數 1176 閱讀 9589

p1913螺旋矩陣

accepted

標籤:noip普及組2014

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

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

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

1

1211102

131693

141584

567 12341213145111615610987

現給出矩陣大小 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。

noip2014 普及組

1)很容易就想成先生成這樣乙個方陣,然後再輸出(i,j)的數,但n<=30,000,如果定義a[n][n],顯然不合適

2)既然只需要輸出乙個數,而矩陣的資料又是按規律填入,那麼只要反過來想就好了

3)按照螺旋的的方式一圈圈去除資料,比如樣例4*4的矩陣,最外圈12個數,也就是(n-1)*4,至於這12個如何放,其實並不重要,只要i,j不在這一圈上,那麼只要關心圈上總的個數就好

4)每去除一圈,去除的總數t+=(n-1)*4,而行數n-2,相應的,要求的i,j則分別減1,不斷迴圈這個過程,直到i或者j成了最外一圈

5)根據(i,j)所在的位置,加上之前的數即可

#include using namespace std;

int n,x,y,t;

int main()

{ cin>>n>>x>>y;

while(x>1&&x1&&y

191 煎餅排序

題目描述 給定陣列 a,我們可以對其進行煎餅翻 我們選擇一些正整數 k a.length,然後反轉 a 的前 k 個元素的順序。我們要執行零次或多次煎餅翻轉 按順序一次接一次地進行 以完成對陣列 a 的排序。返回能使 a 排序的煎餅翻轉操作所對應的 k 值序列。任何將陣列排序且翻轉次數在 10 a....

LeetCode191 統計詞頻

寫乙個 bash 指令碼以統計乙個文字檔案 words.txt 中每個單詞出現的頻率。為了簡單起見,你可以假設 words.txt只包括小寫字母和 每個單詞只由小寫字母組成。單詞間由乙個或多個空格字元分隔。示例 假設 words.txt 內容如下 dayis sunny the thethe sun...

第191場周賽

class solution return res 這裡有個注意的點,maxh maxw這兩個int的值的乘積會超過int的範圍,所以要先轉換為double class solution maxh maxh h horizontalcuts hcut 1 maxh h horizontalcuts ...