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》——合并两个排序的链表
《剑指offer》——合并两个排序的链表
|
6月前
【每日一题Day293】LC23合并K个升序链表 | K指针 堆排序 归并排序
【每日一题Day293】LC23合并K个升序链表 | K指针 堆排序 归并排序
44 0
【剑指offer】-合并两个排序的链表-16/67
【剑指offer】-合并两个排序的链表-16/67
|
6月前
|
Java C语言
剑指offer(牛客)——合并两个排序的链表
剑指offer(牛客)——合并两个排序的链表
39 1
|
6月前
剑指 Offer 25:合并两个排序的链表
剑指 Offer 25:合并两个排序的链表
43 1
|
6月前
|
人工智能 Java C++
每日一题《剑指offer》链表篇之合并k个已排序的链表
每日一题《剑指offer》链表篇之合并k个已排序的链表
97 0
每日一题《剑指offer》链表篇之合并k个已排序的链表
|
6月前
leetcode-148:排序链表
leetcode-148:排序链表
37 0
|
6月前
牛客网-合并两个排序的链表
牛客网-合并两个排序的链表
35 0
【LeetCode——排序链表】
排序链表 一道链表排序题,链接在这里 二、解题思路: 解题思路:使用归并排序(用递归实现) 第一步:先找到链表的中间节点
图解LeetCode——剑指 Offer 25. 合并两个排序的链表
图解LeetCode——剑指 Offer 25. 合并两个排序的链表
94 0