#37946: C++懶人解


010521@mail.pcsh.ntpc.edu.tw (twilight)

學校 : 新北市立板橋高級中學
編號 : 173875
來源 : [61.216.160.24]
最後登入時間 :
2024-12-26 17:00:46
k732. 2. 特殊位置 -- 2023年6月APCS | From: [101.136.235.50] | 發表日期 : 2023-10-20 13:27

int a[250][250], p[50][2];
//直接擴充陣列

範例輸入 #2
2 3
5 2 3
4 5 6

其最大擴充陣列為
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 5 2 3 0 0 0
0 0 0 4 5 6 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0

也就是說5的座標是(3,3) 而3=m+n-1,我們設其為A點
可以估算出最大陣列(50*50)的最大擴充陣列的A點為(99,99),99=m+n-1=50+50-1;
再估算一下,因為對稱,所以擴充陣列最大為(99+50+99)*(99+50+99) ~= (250*250)//(其實也可以開更大哈)

寫一個計算加總的函數
然後把原本陣列的每個數字都跑完即可(不過需要注意座標的起點終點同時加(位移))(紀錄座標時也要扣位移)
for(int i = 100; i < 100+n; i++){
   for(int j = 100; j < 100+m; j++){...
....
p[ans][0] = i-100;
p[ans][1] = j-100;

 
ZeroJudge Forum