1. 程式人生 > >PAT 1082. 射擊比賽 (20)

PAT 1082. 射擊比賽 (20)

style std mes oid pre form ase span mar

本題目給出的射擊比賽的規則非常簡單,誰打的彈洞距離靶心最近,誰就是冠軍;誰差得最遠,誰就是菜鳥。本題給出一系列彈洞的平面坐標(x,y),請你編寫程序找出冠軍和菜鳥。我們假設靶心在原點(0,0)。

輸入格式:

輸入在第一行中給出一個正整數 N(<= 10 000)。隨後 N 行,每行按下列格式給出:

ID x y

其中 ID 是運動員的編號(由4位數字組成);x 和 y 是其打出的彈洞的平面坐標(x,y),均為整數,且 0 <= |x|, |y| <= 100。題目保證每個運動員的編號不重復,且每人只打 1 槍。

輸出格式:

輸出冠軍和菜鳥的編號,中間空 1 格。題目保證他們是唯一的。

輸入樣例:

3
0001 5 7
1020 -1 3
0233 0 -1

輸出樣例:

0233 0001


本題比較簡單,我們可以把每個與運動員的信息封裝在一個結構體中。
然後利用sort函數來對結構體數組進行排序。
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 struct node{
 4     int id;
 5     int x;
 6     int y;
 7 }s[10000];
 8 int cmp(struct node a,struct node b)
 9 {
10     return (a.x*a.x+a.y*a.y)<(b.x*b.x+b.y*b.y);
11 } 12 int main() 13 { 14 int n; 15 scanf("%d",&n); 16 for(int i=0;i<n;i++) 17 { 18 scanf("%d %d %d",&s[i].id,&s[i].x,&s[i].y); 19 } 20 sort(s,s+n,cmp); 21 printf("%04d %04d",s[0].id,s[n-1].id); 22 return 0; 23 }

新人發帖。。。。。。歡迎討論。。。

PAT 1082. 射擊比賽 (20)