PAT 甲级 1026 JAVA
import java
.util
.*
;
public class Main {
static Comparator2 com
= new Comparator2();
static List
<Table> total_tables
= new ArrayList<>();
static List
<Table> vip_tables
= new ArrayList<>();
static Queue
<Player> normal_queue
= new LinkedList<>();
static Queue
<Player> vip_queue
= new LinkedList<>();
static List
<Player> total_member
= new ArrayList<>();
public static void main(String
[] args
) {
Scanner sc
= new Scanner(System
.in
);
int N
= sc
.nextInt();
for (int i
= 0; i
< N
; i
++) {
Player p
= new Player();
String arrTime
= sc
.next();
String
[] spl
= arrTime
.split(":");
int hour
= Integer
.parseInt(spl
[0]);
int min
= Integer
.parseInt(spl
[1]);
int sec
= Integer
.parseInt(spl
[2]);
p
.arrivingTime
= hour
* 3600 + min
* 60 + sec
;
p
.playTime
= sc
.nextInt() * 60;
if (p
.playTime
> 120 * 60) {
p
.playTime
= 120 * 60;
}
p
.VIP
= sc
.nextInt();
total_member
.add(p
);
}
int K
= sc
.nextInt();
for (int i
= 0; i
< K
; i
++) {
total_tables
.add(new Table(i
));
}
int M
= sc
.nextInt();
for (int i
= 0; i
< M
; i
++) {
vip_tables
.add(total_tables
.get(sc
.nextInt() - 1));
}
for (int i
= 8 * 3600 - 1; i
< 21 * 3600; i
++) {
process(i
, total_member
);
}
Collections
.sort(total_member
, com
);
for (Player p
: total_member
) {
if (p
.serveTime
== 0) {
continue;
}
System
.out
.println(exchangeTimeFormat(p
.arrivingTime
) + " " + exchangeTimeFormat(p
.serveTime
) + " " + Math
.round((double)p
.waitTime
/ 60));
}
StringBuffer strb
= new StringBuffer();
for (Table t
: total_tables
) {
strb
.append(t
.times
);
strb
.append(" ");
}
System
.out
.println(strb
.deleteCharAt(strb
.length() - 1).toString());
}
private static String
exchangeTimeFormat(int time
) {
StringBuffer strb
= new StringBuffer();
int hour
= time
/ 3600;
int min
= (time
% 3600) / 60;
int sec
= time
% 3600 % 60;
if (hour
< 10) {
strb
.append(0);
}
strb
.append(hour
);
strb
.append(":");
if (min
< 10) {
strb
.append(0);
}
strb
.append(min
);
strb
.append(":");
if (sec
< 10) {
strb
.append(0);
}
strb
.append(sec
);
return strb
.toString();
}
private static void process(int current_time
, List
<Player> total_member
) {
for (Player p
: total_member
) {
if (p
.endTime
== current_time
) {
total_tables
.get(p
.table_number
).isUsed
= 0;
}
if (p
.arrivingTime
== current_time
) {
if (p
.VIP
== 1) {
vip_queue
.add(p
);
} else {
normal_queue
.add(p
);
}
}
}
Player cur
;
if (!vip_queue
.isEmpty()) {
cur
= vip_queue
.peek();
for (Table t
: vip_tables
) {
if (t
.isUsed
== 0) {
t
.isUsed
= 1;
t
.times
++;
cur
.serveTime
= current_time
;
cur
.table_number
= t
.ID
;
cur
.waitTime
= current_time
- cur
.arrivingTime
;
cur
.endTime
= cur
.serveTime
+ cur
.playTime
;
if (cur
.endTime
> 21 * 3600) cur
.endTime
= 21 * 3600;
vip_queue
.remove();
return;
}
}
for (Table t
: total_tables
) {
if (t
.isUsed
== 0) {
t
.isUsed
= 1;
t
.times
++;
cur
.serveTime
= current_time
;
cur
.table_number
= t
.ID
;
cur
.waitTime
= current_time
- cur
.arrivingTime
;
cur
.endTime
= cur
.serveTime
+ cur
.playTime
;
if (cur
.endTime
> 21 * 3600) cur
.endTime
= 21 * 3600;
vip_queue
.remove();
return;
}
}
} else if (!normal_queue
.isEmpty()) {
cur
= normal_queue
.peek();
for (Table t
: total_tables
) {
if (t
.isUsed
== 0) {
t
.isUsed
= 1;
t
.times
++;
cur
.serveTime
= current_time
;
cur
.table_number
= t
.ID
;
cur
.waitTime
= current_time
- cur
.arrivingTime
;
cur
.endTime
= cur
.serveTime
+ cur
.playTime
;
if (cur
.endTime
> 21 * 3600) cur
.endTime
= 21 * 3600;
normal_queue
.remove();
return;
}
}
} else {
return;
}
}
private static class Player {
int arrivingTime
;
int serveTime
;
int playTime
;
int waitTime
;
int endTime
;
int VIP
;
int table_number
;
}
private static class Table {
int isUsed
;
int times
;
int ID
;
Table(int ID
) {
this.ID
= ID
;
}
}
private void decide
(int currentTime
, Player p1
) {
if (p1
.VIP
== 1) {
}
}
private static class Comparator2 implements Comparator<Player> {
@Override
public int compare(Player p1
, Player p2
) {
if (p1
.serveTime
> p2
.serveTime
) {
return 1;
} else {
return -1;
}
}
}
}
转载请注明原文地址:https://tech.qufami.com/read-28229.html