pat1017
来源:互联网 发布:软件培训班 编辑:程序博客网 时间:2024/05/29 12:16
pat1017 模拟类问题,链接如下
http://www.patest.cn/contests/pat-a-practise/1017
这样的问题我最近总是做不对,最后有一组用例超时了,23分,不知是不是pat oj对java语言的时间要求不太合理,看到类似算法的c语言代码是可以通过的2333333
*本题需要注意的点是,当用户要求处理时间大于一小时时应当将之设为1小时,同时,当用户到达时间大于当前时间时窗口应当处于空置状态
*
import java.util.ArrayList;import java.util.Collections;import java.util.Scanner;public class Main { static int M,N; static Customer[] windows; static ArrayList<Customer> waitQueue; static ArrayList<Customer> allcustomer; static int now; public static void main(String[] args) { Scanner sc=new Scanner(System.in); N=sc.nextInt(); M=sc.nextInt(); windows=new Customer[M]; waitQueue=new ArrayList<Customer>(); allcustomer=new ArrayList<Customer>(); for(int i=0;i<N;i++){ Customer cs=new Customer(timeToInt(sc.next()), sc.nextInt()*60); if(cs.wait>1*60*60) cs.wait=1*60*60; if(cs.startTime<=9*60*60){ waitQueue.add(cs); allcustomer.add(cs); } } Collections.sort(waitQueue); if(waitQueue.size()==0){ System.out.println("0.0"); return; } now=waitQueue.get(0).startTime; while(true){ if(WindowIsEmpty() && waitQueue.size()==0) break; for(int i=0;i<windows.length;i++){ if(windows[i]!=null){ if(windows[i].wait==0) windows[i]=null; } } if(GiveAEmptyWindow()!=-1 && waitQueue.size()>0 && now>=0&&waitQueue.get(0).startTime<=now){ windows[GiveAEmptyWindow()]=waitQueue.get(0); waitQueue.remove(0); continue; } now++; for(int i=0;i<windows.length;i++){ if(windows[i]!=null){ windows[i].wait--; } } for(int i=0;i<waitQueue.size();i++){ if(waitQueue.get(i).startTime<now) waitQueue.get(i).waitTime++; } } int sum=0; for(int i=0;i<allcustomer.size();i++) sum+=allcustomer.get(i).waitTime; double anwer=(double)sum/60/allcustomer.size(); System.out.println(String.format("%.1f", anwer)); } public static int GiveAEmptyWindow(){ for(int i=0;i<windows.length;i++) if(windows[i]==null) return i; return -1; } public static boolean WindowIsEmpty(){ for(int i=0;i<windows.length;i++) if(windows[i]!=null) return false; return true; } public static int timeToInt(String s){ String[] a=s.split(":"); int h=((a[0].toCharArray()[0]-'0')*10) +(a[0].toCharArray()[1]-'0'); int m=((a[1].toCharArray()[0]-'0')*10) +(a[1].toCharArray()[1]-'0'); int ss=((a[2].toCharArray()[0]-'0')*10) +(a[2].toCharArray()[1]-'0'); return h*60*60+m*60+ss-8*60*60; }}class Customer implements Comparable<Customer>{ int startTime; int wait; int waitTime; Customer(int startTime,int waitTime){ this.startTime=startTime; this.wait=waitTime; this.waitTime=0; } @Override public int compareTo(Customer o) { Integer a=this.startTime; Integer b=o.startTime; return a.compareTo(b); }}
0 0
- pat1017
- pat1017
- PAT1017~~~
- pat1017
- PAT1017. A除以B
- PAT1017. Queueing at Bank
- PAT1017. Queueing at Bank
- pat1017 Queueing at Bank
- pat1017:A除以B
- PAT1017. Queueing at Bank
- PAT1017. Queueing at Bank
- PAT1017. A除以B (20)
- PAT1017 A除以B (20)
- PAT1017. Queueing at Bank (25)
- PAT1017 BASIC:A除以B (20)
- PAT1017. 两个有序链表序列的合并(15)
- Memcache笔记
- 设计模式之代理模式(实现自己的数据库连接池)
- 面试笔试杂项积累-leetcode 191-200
- Induction, Deduction and Reduction
- 【URAL 刷题记】URAL 1317 ~ URAL 1326
- pat1017
- Android逆向分析(一) - 反编译看看手Q口令红包的实现原理
- String to Integer(atoi) LeetCode
- Android 前后台切换与OpenGL(EGL)创建销毁的周期
- cvCalcBackProject() 直方图反向投影匹配
- uva 489刽子手游戏
- 大数减法
- HDU 3081 Marriage Match II(二分+并查集+最大流)
- C++继承的简单例程