import java.util.*; public class Main { private static int pmNum; public static void main(String[] args){ Scanner in = new Scanner(System.in); pmNum = in.nextInt(); int programmerNum = in.nextInt(); int ideaNum = in.nextInt(); ArrayList<Idea> ideaList = new ArrayList<>(ideaNum); for(int i=0; i<ideaNum; i++){ ideaList.add(new Idea(i, in.nextInt(), in.nextInt(), in.nextInt(), in.nextInt())); } // 小根堆 PriorityQueue<Programmer> programmerQueue = new PriorityQueue<>(programmerNum, Comparator.comparingInt(o -> o.timeCurr)); for(int i=0; i<programmerNum; i++){ programmerQueue.add(new Programmer(1)); } int[] result = new int[ideaNum]; while(!ideaList.isEmpty()){ Programmer programmer = programmerQueue.remove(); int seq = programmer.handle(ideaList); if(seq != -1){ result[seq] = programmer.timeCurr; } programmerQueue.add(programmer); } for(int time: result){ System.out.println(time); } } private static class Idea{ int seq; int pmSeq; int timeSubmit; int priority; int duration; public Idea(int seq, int pmSeq, int timeSubmit, int priority, int duration){ this.seq = seq; this.pmSeq = pmSeq; this.timeSubmit = timeSubmit; this.priority = priority; this.duration = duration; } } private static class Programmer{ int timeCurr; public Programmer(int timeCurr){ this.timeCurr = timeCurr; } private Idea selectIdea(List<Idea> ideaList){ Idea[] topIdeaOfPms = new Idea[pmNum+1]; // 选出每个PM最想完成的idea for(Idea idea : ideaList){ // 当前programmer所处时间 < 当前idea提交时间 if(this.timeCurr < idea.timeSubmit){ continue; } if(topIdeaOfPms[idea.pmSeq] == null){ topIdeaOfPms[idea.pmSeq] = idea; continue; } // 优先等级 if(idea.priority < topIdeaOfPms[idea.pmSeq].priority){ continue; } if(idea.priority > topIdeaOfPms[idea.pmSeq].priority){ topIdeaOfPms[idea.pmSeq] = idea; continue; } // 所需时间 if(idea.duration < topIdeaOfPms[idea.pmSeq].duration){ topIdeaOfPms[idea.pmSeq] = idea; continue; } if(idea.duration > topIdeaOfPms[idea.pmSeq].duration){ continue; } // 提交时间 if(idea.timeSubmit < topIdeaOfPms[idea.pmSeq].timeSubmit){ topIdeaOfPms[idea.pmSeq] = idea; continue; } if(idea.timeSubmit > topIdeaOfPms[idea.pmSeq].timeSubmit){ continue; } } // 该程序员最终选择的idea Idea selectedIdea = null; for(Idea idea : topIdeaOfPms){ if(idea == null){ continue; } if(selectedIdea == null){ selectedIdea = idea; } // 所需时间 if(idea.duration < selectedIdea.duration){ selectedIdea = idea; } // PM序号 else if(idea.duration==selectedIdea.duration && idea.pmSeq<selectedIdea.pmSeq){ selectedIdea = idea; } } return selectedIdea; } private int handle(List<Idea> ideaList){ Idea selectedIdea = this.selectIdea(ideaList); if(selectedIdea != null){ timeCurr += selectedIdea.duration; ideaList.remove(selectedIdea); return selectedIdea.seq; }else{ // 未获取到需求 timeCurr += 1; return -1; } } } }