import java.util.Collections;
import java.util.Scanner;
import java.util.Vector;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
//钥匙总量
int N = s.nextInt();
//K次借还
int K = s.nextInt();
//钥匙数组
int[] key = new int[N];
//给钥匙数组赋值 从1开始
for(int i=1;i<=N;i++) {
key[i-1]=i;
}
//找出最后一个老师归还的时刻
int LastTime = 0;
// 0为钥匙编号 1为开始上课的时间 2为归还钥匙的时刻
int[][] arr = new int[K][3];
for(int i=0;i<K;i++) {
arr[i][0] = s.nextInt();
arr[i][1] = s.nextInt();
arr[i][2] = arr[i][1]+s.nextInt();
if(arr[i][2]>LastTime) LastTime=arr[i][2];
}
//某个时刻需要借钥匙的老师们
Vector jie = new Vector<Integer>();
//某个时刻需要还钥匙的老师们
Vector huan = new Vector<Integer>();
//开始安排 从每个时刻开始遍历
for(int i=1;i<=LastTime;i++) {
//开始查找需要借或还的老师
for(int j=0;j<K;j++) {
//记录是几号钥匙
if (arr[j][1]==i) jie.addElement(arr[j][0]);
if(arr[j][2]==i) huan.addElement(arr[j][0]);
}
//如果没有借也没有还的 continue
if(jie.isEmpty() && huan.isEmpty()) continue;
//钥匙是先全还回去再取出,故先考虑还钥匙
//如果有多位老师还钥匙,则他们按钥匙编号从小到大的顺序还。
//给huan的vector排个序 此时数组的第一位就是最小的 最后一位是最大的
Collections.sort(huan);
while(!huan.isEmpty()) {
for(int k = 0;k<N;k++) {
//找到数组第一个空位,归还
if(key[k]==-1) {
//本次要还的钥匙 为huan的第一个
int temp = (int)huan.elementAt(0);
//huan移出
huan.removeElementAt(0);
key[k]=temp;
break;
}
}
}//此时还钥匙成功 老师开始取钥匙
while(!jie.isEmpty()) {
//本次要借的钥匙
int temp = (int)jie.elementAt(0);
jie.removeElementAt(0);
for(int k=0;k<N;k++) {
if(key[k]==temp) {
key[k]=-1;
break;
}
}
}
}
//开始打印钥匙
for(int k=0;k<N;k++) {
System.out.print(key[k]+" ");
}
}
}
CCF-CSP 201709-2公共钥匙盒
最新推荐文章于 2024-09-08 16:33:59 发布