uva1203 - Argus (排序、优先级队列)

简介: uva1203 - Argus (排序、优先级队列)
importjava.io.BufferedReader;
importjava.io.InputStreamReader;
importjava.io.FileReader;
importjava.io.IOException;
importjava.util.StringTokenizer;
importjava.util.Arrays;
importjava.util.PriorityQueue;
classMain{
publicstaticfinalbooleanDEBUG=false;  
publicstaticintN=1010;
publicstaticRegister[] instruction=newRegister[N];
publicstaticintn;
staticclassRegisterimplementsComparable<Register>    {
intnum;
intperiod;
intcnt;
publicintcompareTo(Registerother)
        {
if (period!=other.period) returnperiod-other.period;
returnnum-other.num;
        }
    }
staticclassNodeimplementsComparable<Node>    {
intnum;
intv;
publicintcompareTo(Nodeother)
        {
if (v!=other.v) returnv-other.v;
returnnum-other.num;
        }
    }
publicstaticvoidmain(String[] args) throwsIOException    {
BufferedReadercin;
Strings;
intk;
if (DEBUG) {
cin=newBufferedReader(newFileReader("d:\\OJ\\uva_in.txt"));
        } else {
cin=newBufferedReader(newInputStreamReader(System.in));
        }
n=0;
while ((s=cin.readLine()) !=null) {
if ("#".equals(s)) break;
StringTokenizerst=newStringTokenizer(s);
intcnt=0;
instruction[n] =newRegister();
instruction[n].cnt=0;
while (st.hasMoreTokens()) {
Stringtmp=st.nextToken();
if (cnt==1) {
instruction[n].num=Integer.parseInt(tmp);
                } elseif (cnt==2) {
instruction[n].period=Integer.parseInt(tmp);
                }
cnt++;
            }
n++;
        }
s=cin.readLine();
k=Integer.parseInt(s);
Arrays.sort(instruction, 0, n);
intoutputcnt=k;
inti=0;
while (i<k) {
intstart=instruction[0].period*instruction[0].cnt;
intend=start+instruction[0].period;
PriorityQueue<Node>pq=newPriorityQueue<Node>();
for (intj=0; j<n; j++) {
intcur=instruction[j].period* (instruction[j].cnt+1);
if (cur>=start&&cur<=end) {
i++;
Nodetmp=newNode();
tmp.num=instruction[j].num;
tmp.v=cur;
instruction[j].cnt++;
pq.add(tmp);
                }
            }
while (!pq.isEmpty() &&outputcnt>0) {
System.out.println(pq.poll().num);
outputcnt--;
            }
        }
    }
}
目录
相关文章
|
4月前
【每日一题Day293】LC23合并K个升序链表 | K指针 堆排序 归并排序
【每日一题Day293】LC23合并K个升序链表 | K指针 堆排序 归并排序
42 0
|
4月前
leetcode-148:排序链表
leetcode-148:排序链表
35 0
栈和队列OJ题:LeetCode--232.用栈实现队列
LeetCode--232.用栈实现队列:详细题解以及图解和完整代码。
55 0
【LeetCode——排序链表】
排序链表 一道链表排序题,链接在这里 二、解题思路: 解题思路:使用归并排序(用递归实现) 第一步:先找到链表的中间节点
|
算法
LeetCode每日1题--用栈实现队列
LeetCode每日1题--用栈实现队列
75 0
队列OJ题(一)
✅每日一练:622. 设计循环队列 - 力扣(LeetCode)
55 0
队列OJ题(二)
✅每日一练:232. 用栈实现队列 - 力扣(LeetCode)
66 0
队列OJ题(三)
✅每日一练:232. 用栈实现队列 - 力扣(LeetCode)
40 0
|
Python
LeetCode 剑指 Offer 25. 合并两个排序的链表
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
83 0
AcWing 36. 合并两个排序的链表
AcWing 36. 合并两个排序的链表
152 0
AcWing 36. 合并两个排序的链表