PAT Advanced Level 1030
来源:互联网 发布:怎么学python 编辑:程序博客网 时间:2024/05/16 05:05
题目地址:http://pat.zju.edu.cn/contests/pat-a-practise/1030
代码如下:
#include <cstdio>#include <vector>#include <algorithm>using namespace std;struct player{ char arrive[10]; int arrInSec; int isVIP; int isPlayed; int playTime; bool operator <(const player &A) const{ return arrInSec<A.arrInSec; }};struct table{ int no; int isVIP; int sec; int serverd;};vector<player> pla;vector<table> tab;int strToSec(char s[]){ return ((s[0]-'0')*10+s[1]-'0')*60*60+((s[3]-'0')*10+s[4]-'0')*60+(s[6]-'0')*10+s[7]-'0';}int chooseTab(int n,int time){ int result; int vmin=0x7fffffff; for(int i=0;i<n;i++){ if(tab[i].sec<vmin) vmin=tab[i].sec,result=i; if(tab[i].sec<=time) return i; } return result;}int chooseTabForVip(int n,int time){ int result; int vmin=0x7fffffff; for(int i=0;i<n;i++){ if(tab[i].isVIP&&tab[i].sec<=time) return i; } for(int i=0;i<n;i++){ if(tab[i].sec<vmin) vmin=tab[i].sec,result=i; if(tab[i].isVIP==0&&tab[i].sec<=time) return i; } return result;}int getW(int s1,int s2){ if(s2>s1){ int second=s2-s1; int result=second/60; if(second%60>=30) result++; return result; } else return 0;}int main(){ freopen("C:\\Users\\Devon\\Desktop\\input.txt","r",stdin); int np; scanf("%d",&np); pla.clear(); tab.clear(); for(int i=0;i<np;i++){ player temp; scanf("%s",temp.arrive); temp.arrInSec=strToSec(temp.arrive); scanf("%d",&temp.playTime); if(temp.playTime>120) temp.playTime=120; temp.playTime*=60; scanf("%d",&temp.isVIP); temp.isPlayed=0; pla.push_back(temp); } int nt; int vipt; scanf("%d%d",&nt,&vipt); for(int i=1;i<=nt;i++){ table temp; temp.no=i; temp.isVIP=0; temp.serverd=0; temp.sec=8*60*60; tab.push_back(temp); } for(int i=0;i<vipt;i++){ int temp; scanf("%d",&temp); tab[temp-1].isVIP=1; } sort(pla.begin(),pla.end()); int closeTime=21*60*60; int processed=0; while(processed<np){ for(int i=0;i<np;i++){ if(pla[i].isPlayed==0){ processed++; if(pla[i].arrInSec>=closeTime){pla[i].isPlayed=1;break;} int temp; int k; if(pla[i].isVIP){ temp=chooseTabForVip(nt,pla[i].arrInSec),k=i; if(tab[temp].sec>=closeTime){pla[i].isPlayed=1;break;} } else{ temp=chooseTab(nt,pla[i].arrInSec); if(tab[temp].sec>=closeTime){pla[i].isPlayed=1;break;} int flag=0; if(tab[temp].isVIP&&tab[temp].sec>pla[i].arrInSec){ for(int j=i+1;j<np;j++){ if(pla[j].isVIP&&pla[j].isPlayed==0&&pla[j].arrInSec<=tab[temp].sec){ flag=1; k=j; break; } } } if(!flag) k=i; } if(pla[k].arrInSec>tab[temp].sec) tab[temp].sec=pla[k].arrInSec; int hour=tab[temp].sec/60/60; int minute=tab[temp].sec/60%60; int second=tab[temp].sec%60; printf("%s %02d:%02d:%02d %d\n",pla[k].arrive, hour,minute,second,getW(pla[k].arrInSec,tab[temp].sec)); pla[k].isPlayed=1; tab[temp].sec+=pla[k].playTime; tab[temp].serverd++; break; } } } for(int i=0;i<nt-1;i++) printf("%d ",tab[i].serverd); printf("%d\n",tab[nt-1].serverd); return 0;}
0 0
- PAT Advanced Level 1030
- Pat(Advanced Level)Practice--1030(Travel Plan)
- PAT Advanced Level 1077
- PAT Advanced Level 1078
- PAT Advanced Level 1079
- PAT Advanced Level 1080
- PAT Advanced Level 1010
- PAT Advanced Level 1016
- PAT Advanced Level 1018
- PAT Advanced Level 1039
- PAT Advanced Level 1060
- PAT Advanced Level 1026
- PAT Advanced Level 1029
- PAT Advanced Level 1033
- PAT Advanced Level 1034
- PAT Advanced Level 1038
- PAT Advanced Level 1045
- PAT Advanced Level 1049
- SIP协议详解-6
- PAT Advanced Level 1029
- Spring集成Thrift--Server AND Client
- 基本排序之详解归并排序
- SIP协议应答码
- PAT Advanced Level 1030
- C# Arraylist的sort函数的用法
- the compact org-mode guide 第三章
- Linux修改vimrc配置文件,让vi更贴心
- python web-spider之图片保存
- SIP 探析
- 俄罗斯方块:win32api开发
- mov 和 lea 指令比较
- Web Font 自定义字体