浙大pat 1017
2013-02-28 21:18
274 查看
#include<iostream> #include<queue> #include<string> #include<vector> #include<algorithm> using namespace std; //说明:这道题目只要是17:00之前到的都会被处理,通俗点就是银行17:00之后不让进了 int N,K; struct Task{ int arrive_time; int serve_time; int start_serve_time; int complete_time; //按照完成时间从小到大排序 friend bool operator<(Task t1,Task t2) { return t1.complete_time>t2.complete_time; } }; int cmp(Task t1,Task t2){ return t1.arrive_time<t2.arrive_time; } Task task[10005]; priority_queue<Task> q; //获取多少秒 int get_time(string str){ int a=(str[0]-'0')*10+(str[1]-'0'); int b=(str[3]-'0')*10+(str[4]-'0'); int c=(str[6]-'0')*10+(str[7]-'0'); return a*3600+b*60+c; } int main(){ scanf("%d%d",&N,&K); string a; int b; for(int i=1;i<=N;i++){ cin>>a>>b; task[i].arrive_time=get_time(a); task[i].serve_time=b*60; } sort(task+1,task+N+1,cmp); int n=N;//忘记初始化了,导致WA,因为可能所有的任务都大于17*3600这样就会导致n没有初值 for(int i=1;i<=N;i++) if(task[i].arrive_time>17*3600){ n=i-1; break; } double sum=0; if(n<=K){ for(int i=1;i<=n;i++){ if(task[i].arrive_time<8*3600){ task[i].start_serve_time=8*3600; sum+=(task[i].start_serve_time-task[i].arrive_time); } } if(n==0) printf("0.0\n"); else printf("%.1f\n",sum*1.0/(60.0*n)); }else{ for(int i=1;i<=K;i++){ if(task[i].arrive_time<8*3600) task[i].start_serve_time=8*3600; else task[i].start_serve_time=task[i].arrive_time; task[i].complete_time=task[i].start_serve_time+task[i].serve_time; sum+=(task[i].start_serve_time-task[i].arrive_time); q.push(task[i]); } for(int i=K+1;i<=n;i++){ Task tmp=q.top();q.pop(); if(task[i].arrive_time<=tmp.complete_time) task[i].start_serve_time=tmp.complete_time; else task[i].start_serve_time=task[i].arrive_time; task[i].complete_time=task[i].start_serve_time+task[i].serve_time; sum+=(task[i].start_serve_time-task[i].arrive_time); q.push(task[i]); } printf("%.1f\n",sum*1.0/(60.0*n)); } return 0; }
相关文章推荐
- 浙大 pat Basic Level 1017
- 【C++】浙大PAT (Basic Level)1017. A除以B (20)
- 浙大 PAT Advanced level 1017. Queueing at Bank (25)
- 浙大PAT甲级-1017
- 浙大PAT 1017. A除以B (解题思路)
- 1017. A除以B (20)-PAT乙级真题-PAT乙级真题-浙大PAT乙级真题java实现
- 浙大 PAT Advanced level 1026. Table Tennis (30)
- PAT——1017. A除以B
- pat 1017. Queueing at Bank (模拟优先队列)
- 浙大pat | 牛客网甲级1063 Count PAT's (25)字符串
- PAT (Advanced Level) Practise 1017. Queueing at Bank (25)
- 浙大PAT (Advanced Level) Practise 1043 Is It a Binary Search Tree (25)
- PAT 1017. A除以B
- PAT (Basic Level) Practise (中文)1017. A除以B (20)
- 1035. 插入与归并(25)-浙大PAT乙级真题
- PAT1096--浙大2015机试题--Consecutive Factors (20)
- 浙大PAT水题简单分析 转
- PAT (Basic Level) Practise (中文)- 1017. A除以B (20)
- 浙大PAT甲级 1039
- 浙大PAT甲级 1047