PAT 甲级 1026 JAVA

tech2026-06-14  1

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; } } } }
最新回复(0)