hdu 5182 PM2.5
问题描述
目前,我们用PM2.5的含量来描述空气质量的好坏。一个城市的PM2.5含量越低,它的空气质量就越好。所以我们经常按照PM2.5的含量从小到大对城市排序。一些时候某个城市的排名可能上升,但是他的PM2.5的含量也上升了。这就意味着他的空气质量并没有改善。所以这样的排序方式是不合理的。为了使得排序合理,我们提出了一个新的排序方法。我们按照两个PM2.5含量测量的差值(第一次-第二次)来对他们按降序排序,如果有重复,按照第二次的测量值升序排序,如果还有重复,按照输入的顺序排序。
输入描述
多组测试数据(大概100100组),每一组测试数据第一行先给出一个整数nn,代表有nn个城市需要被排序。城市被从00到n-1n−1标号。接下来nn行,每一含有两个整数代表每一个城市第一次和第二次被测量的PM2.5值。第ii行描述城市i-1i−1的信息。
请处理到文件末尾。
[参数说明]
所有整数都在[1,100][1,100]的范围内。
输出描述
对于每一个数据,输出排好序之后的城市ID。
输入样例
2 100 1 1 2 3 100 50 3 4 1 2
输出样例
0 1 0 2 1
建立结构体,按建立排序方式
#include <iostream> #include <algorithm> #include <cstdio> using namespace std; struct node { int value,test,id; bool operator < (const node &another) const { if(value!=another.value) return value>another.value; if(test!=another.test) return test<another.test; return id<another.id; } }a[111]; int main() { int n,u,v; while(~scanf("%d",&n)) { for(int i=0;i<n;i++) { scanf("%d%d",&u,&v); a[i].value=u-v; a[i].test=v; a[i].id=i; } sort(a,a+n); for(int i=0;i<n;i++) { if(i) printf(" "); printf("%d",a[i].id); } puts(""); } return 0; }