B - 品仙宴 [PSA]
HackerRank - jim-and-the-orders
尝过仙果之后,宴会正式开始,所有参加宴会的宾客都选好了自己喜欢的菜品。各位宾客点菜时间会有不同,并且各道菜的上菜时间也不尽相同,这样的话,有可能先点菜的会晚一些才能吃到自己喜欢的菜。请你预测一下点菜的客人等到自己所喜欢的菜品的上菜顺序是怎样的。
数据输入
第一行一个整数N,代表有N名宾客点菜,接下来有N行,每行是由空格分隔的两个整数t1,t2,第i行(1≤i≤N)的数据表示第i名宾客在t1时刻点了菜,这道菜在t2时间后可以上菜。
- 1 ≤N ≤ 103
- 1 ≤ t1,t2 ≤106
数据输出
按从早到晚的顺序,在一行内输出等到了自己点的菜的客人的序号(客人序号从1开始。若上菜时间相同,先给序号小的上菜),各数字之间用1个空格分隔。行首与行尾不能有多余空格。
样例1
输入样例
5 8 1 4 2 5 6 3 1 4 3
输出样例
4 2 5 1 3
提示
4号客人第3分钟点菜,1分钟后上菜,在第4分钟就可以等到菜,是第1个吃到菜的,所以第1个数字是4。而2号客人第4分钟点菜,2分钟后上菜,是第2个吃到菜的,所以第2个数字为2。类似的,5号客人7分钟后可以等到上菜。1号和3号在第11分钟后等到上菜,时间相同先给1号再给3号,所以顺序是4 2 5 1 3
样例2
输入样例
10 170 521 118 395 376 600 847 286 915 824 106 171 119 927 290 653 205 645 918 461
输出样例
6 2 1 9 8 3 7 4 10 5
也很简单,刷刷几分钟写完
先把题好好读懂 下手就很容易
甚至没必要动用结构体,序号的话,直接将不需要的arr[i][0]改成序号就可以了。
arr[i][1]表示上菜时间,arr[i][0]表示序号
排序输出即可
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int arr[][] = new int[n][2];
for (int i = 0; i < arr.length; i++) {
arr[i][0] = sc.nextInt();
arr[i][1] = sc.nextInt();
arr[i][1] += arr[i][0];
arr[i][0] = i+1;
}
Arrays.sort(arr, new Comparator<int[]>() {
public int compare(int[] x, int[] y) {
if(x[1]==y[1])
return x[0]-y[0];
return x[1]-y[1];
}
});
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i][0]+" ");
}
}
}