题目描述
某地出现了灾害,各地派出了 $n$ 只救援队。这些救援队是在同一天出发的,但出发时间不一样,路程也有长有短,所以达到时间有先有后。
给定每个队伍的出发时间,以及每只队伍的路程,请按照到达时间为这些队伍排序,如果多只队伍的到达时间正好相等,则出发时间靠前的队伍排在前列,如果出发时间仍然相等,则编号较小的队伍排在前列。
输入描述
第一行:单个整数 $n$,表示救援队数量。
第二行到第$n+1$行:在第$i+1$行,有两个时间,表示第$i$只救援队的出发时间和路程,数据格式均为hh:mm
:
hh
表示小时,在00
到23
之间;mm
表示分钟,在00
到59
之间。
数据范围
1≤n≤1000。
输出描述
共 $n$ 行,每行一个整数,按救援队到达的先后顺序输出它们的编号。
输入样例
3
19:00 01:00
15:00 05:00
15:00 05:00
输出样例
2
3
1
//参考答案
#include<iostream>
#include<algorithm>
using namespace std;
struct Team {
long long code;
int num;
};
bool cmp(Team team1, Team team2) {
return team1.code < team2.code;
}
int main() {
int n;
cin >> n;
Team team[n];
int h1, m1, h2, m2;
for (int i = 0; i < n; i++) {
scanf("%d:%d %d:%d", &h1, &m1, &h2, &m2);
long long arr = (h1+h2)*60 + (m1+m2);
long long start = h1*60 + m1;
int num = i+1;
long long code = num + start*1e4 + arr*1e8;
team[i].code = code;
team[i].num = num;
}
sort(team, team+n, cmp);
for (int i = 0; i < n; i++) {
cout << team[i].num << endl;
}
return 0;
}