模拟一下就好了,可以用Deque双端队列
import java.util.Arrays;import java.util.Deque;import java.util.LinkedList;import java.util.Queue;import java.util.Scanner;public class Main { static int[] time = new int[129]; static int[] ch = new int[26]; public static void main(String[] args) { Scanner scan = new Scanner(System.in); int T = scan.nextInt(); while(T--!=0){ Arrays.fill(time, 0); Arrays.fill(ch, 0); int n = scan.nextInt(); int t1 = scan.nextInt(); int t2 = scan.nextInt(); int t3 = scan.nextInt(); int t4 = scan.nextInt(); int t5 = scan.nextInt(); int Q = scan.nextInt(); time['='] = t1; time['i'] = t2; time['c'] = t3; time['l'] = t4; time['d'] = t5; scan.nextLine(); Deque<PRogram> wait = new LinkedList<>(); Queue<Program> stop = new LinkedList<>(); for(int i=1;i<=n;i++){ Program program = new Program(); program.number = i; while(true){ String s = scan.nextLine(); program.code.add(s); if("end".equals(s))break; } wait.add(program); } boolean isLock = false; while(!wait.isEmpty()){ //System.out.println("1"); Program program =wait.poll(); int t = Q; while(!program.code.isEmpty()){ if(t<=0){ wait.add(program); break; } String s = program.code.peek(); if(s.charAt(2)=='c'){ if(isLock){ stop.add(program); break; }else{ isLock = true; } } t-=time[s.charAt(2)]; program.code.poll(); if(s.charAt(2)=='='){ char c = s.charAt(0); int num = Integer.parseInt(s.substring(4)); ch[c-'a'] = num; } if(s.charAt(2)=='d'){ break; } if(s.charAt(2)=='l'){ isLock = false; if(!stop.isEmpty()){ wait.addFirst(stop.poll()); } } if(s.charAt(2)=='i'){ char c = s.charAt(6); System.out.println(program.number+": "+ch[c-'a']); } } } if(T!=0){ System.out.println(); } } } static class Program{ int number; Queue<String> code = new LinkedList<>(); }}
新闻热点
疑难解答