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--;
            }
        }
    }
}
目录
相关文章
|
6月前
剑指 Offer 25:合并两个排序的链表
剑指 Offer 25:合并两个排序的链表
43 1
图解LeetCode——剑指 Offer 25. 合并两个排序的链表
图解LeetCode——剑指 Offer 25. 合并两个排序的链表
93 0
队列OJ题(一)
✅每日一练:622. 设计循环队列 - 力扣(LeetCode)
62 0
队列OJ题(二)
✅每日一练:232. 用栈实现队列 - 力扣(LeetCode)
73 0
队列OJ题(三)
✅每日一练:232. 用栈实现队列 - 力扣(LeetCode)
44 0
|
Python
LeetCode 剑指 Offer 25. 合并两个排序的链表
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
89 0
【leetcode-剑指 Offer 25】合并两个排序的链表
题目描述 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。 示例1: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 1 2 限制: 0 <= 链表长度 <= 1000
【leetcode-剑指 Offer 25】合并两个排序的链表
LeetCode(剑指 Offer)- 51. 数组中的逆序对
LeetCode(剑指 Offer)- 51. 数组中的逆序对
167 0
LeetCode(剑指 Offer)- 51. 数组中的逆序对
|
算法 前端开发 程序员
「LeetCode」剑指Offer-59-II队列的最大值⚡️
「LeetCode」剑指Offer-59-II队列的最大值⚡️
116 0
「LeetCode」剑指Offer-59-II队列的最大值⚡️