问题描述
目前,我们用PM2.5的含量来描述空气质量的好坏。一个城市的PM2.5含量越低,它的空气质量就越好。所以我们经常按照PM2.5的含量从小到大对城市排序。一些时候某个城市的排名可能上升,但是他的PM2.5的含量也上升了。这就意味着他的空气质量并没有改善。所以这样的排序方式是不合理的。为了使得排序合理,我们提出了一个新的排序方法。我们按照两个PM2.5含量测量的差值(第一次-第二次)来对他们按降序排序,如果有重复,按照第二次的测量值升序排序,如果还有重复,按照输入的顺序排序。
输入描述
多组测试数据(大概1的信息。 请处理到文件末尾。 [参数说明] 所有整数都在]的范围内。
输出描述
对于每一个数据,输出排好序之后的城市ID。
输入样例
2 100 1 1 2 3 100 50 3 4 1 2
输出样例
0 1 0 2 1
思路:三关键词排序
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #define maxn 1000 5 char ch[maxn]; 6 using namespace std; 7 struct T 8 { 9 int x;int y;int z; 10 }a[maxn]; 11 int cmp(T x,T y) 12 { 13 return ((x.x>y.x) ||((x.x==y.x && (x.y<y.y))) || (x.x==y.x && x.y==y.y && (x.z<y.z))); 14 } 15 int main() 16 { 17 int n,x,y; 18 while(scanf("%d",&n)!=EOF) 19 { 20 for(int i=1;i<=n;i++) 21 { 22 scanf("%d%d",&x,&y); 23 a[i].x=x-y; 24 a[i].y=y; 25 a[i].z=i-1; 26 } 27 sort(a+1,a+1+n,cmp); 28 for(int i=1;i<n;i++) 29 { 30 printf("%d ",a[i].z); 31 } 32 printf("%d\n",a[n].z); 33 } 34 return 0; 35 }