(以下純個人心得紀錄,說的不一定都對,歡迎指正!)
考慮有人可能根本還沒學過陣列(或懶得用),所以想出了一個不用陣列的解法。我的想法是只需要維護目前最大能力值p1得a1,d1和第二大能力值p2的a2,d2,再藉由關係比較不斷更新第一,二大能力值的a,d即可。 以下是我的程式:
#include<bits/stdc++.h>
using namespace std;
int main(){
cin.tie(0);
ios_base::sync_with_stdio(0);//加速輸入
int n;
int a,d;
int p,p1=-1,p2=-1;
int a1,d1,a2,d2;
cin >> n;
for(int i=0;i<n;i++){
cin >> a >> d;
int p = a*a + d*d;
if(p>p1){//此時p最大 p1為第二大
p2=p1;
p1=p;
a2=a1;d2=d1;
a1=a;d1=d;
}
else if(p>p2){//此時p為第二大
p2=p;
a2=a;d2=d;
}
}
cout << a2 << " " << d2 << '\n';
}
雖然可能不是最簡潔的寫法但可以在不使用陣列的情況下AC。