冷血格斗场
描述
为了迎接08年的奥运会,让大家更加了解各种格斗运动,facer新开了一家冷血格斗场。格斗场实行会员制,但是新来的会员不需要交入会费,而只要同一名老会员打一场表演赛,证明自己的实力。
我们假设格斗的实力可以用一个正整数表示,成为实力值,两人的实力值可以相同。另外,每个人都有一个唯一的id,也是一个正整数。为了使得比赛更好看,每一个新队员都会选择与他实力最为接近的人比赛,即比赛双方的实力值之差的绝对值越小越好,如果有多个人的实力值与他差别相同,则他会选择id最小的那个。
不幸的是,Facer一不小心把比赛记录弄丢了,但是他还保留着会员的注册记录。现在请你帮facer恢复比赛纪录,按照时间顺序依次输出每场比赛双方的id。
第一行一个数n(0 < n <=100000),表示格斗场新来的会员数(不包括facer)。以后n行每一行两个数,按照入会的时间给出会员的id和实力值。一开始,facer就算是会员,id为1,实力值1000000000。
N行,每行两个数,为每场比赛双方的id,新手的id写在前面。
3 2 3 3 1 4 2
2 1 3 2 4 2
#include<stdio.h> #include<math.h> #include<stdlib.h> int main() { int n,a[100000],b[100000],i,tx,ty,j,min1,min2,t; scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d%d",&a[i],&b[i]); } a[0]=1,b[0]=1000000; for(i=1;i<=n-1;i++)//将各个成员按照会员id有小到大的顺序排列 { for(j=i+1;j<=n;j++) { if(a[i]>a[j]) { tx=a[i],ty=b[i]; a[i]=a[j],b[i]=b[j]; a[j]=tx,b[j]=ty; } } } for(i=1;i<=n;i++) { int k=0; for(j=0;j<i;j++)//求出比i位成员id小的成员中实力值绝对值之差最小值 { if((abs(b[i]-b[j]))<min1||j==0) { min1=abs(b[i]-b[j]); } } int min2=10000000; for(j=0;j<=i;j++) { if(min1==abs(b[j]-b[i]))//在满足绝对值最小的条件下找出id最小的成员 { t=a[j]; if(t<min2) { min2=a[j]; } } } printf("%d %d\n",a[i],min2); } }