您的位置:首页 > 其它

1026. Table Tennis (30)

2015-08-01 00:35 260 查看

1026.TableTennis(30)

时间限制400ms 内存限制65536kB 代码长度限制16000B 判题程序Standard作者CHEN,Yue AtabletennisclubhasNtablesavailabletothepublic.Thetablesarenumberedfrom1toN.Foranypairofplayers,iftherearesometablesopenwhentheyarrive,theywillbeassignedtotheavailabletablewiththesmallestnumber.Ifallthetablesareoccupied,theywillhavetowaitinaqueue.Itisassumedthateverypairofplayerscanplayforatmost2hours.Yourjobistocountforeveryoneinqueuetheirwaitingtime,andforeachtablethenumberofplayersithasservedfortheday.OnethingthatmakesthisprocedureabitcomplicatedisthattheclubreservessometablesfortheirVIPmembers.WhenaVIPtableisopen,thefirstVIPpairinthequeuewillhavethepriviledgetotakeit.However,ifthereisnoVIPinthequeue,thenextpairofplayerscantakeit.Ontheotherhand,ifwhenitistheturnofaVIPpair,yetnoVIPtableisavailable,theycanbeassignedasanyordinaryplayers.InputSpecification:Eachinputfilecontainsonetestcase.Foreachcase,thefirstlinecontainsanintegerN(<=10000)-thetotalnumberofpairsofplayers.ThenNlinesfollow,eachcontains2timesandaVIPtag:HH:MM:SS-thearrivingtime,P-theplayingtimeinminutesofapairofplayers,andtag-whichis1iftheyholdaVIPcard,or0ifnot.Itisguaranteedthatthearrivingtimeisbetween08:00:00and21:00:00whiletheclubisopen.Itisassumedthatnotwocustomersarrivesatthesametime.Followingtheplayers'info,thereare2positiveintegers:K(<=100)-thenumberoftables,andM(<K)-thenumberofVIPtables.ThelastlinecontainsMtablenumbers.OutputSpecification:Foreachtestcase,firstprintthearrivingtime,servingtimeandthewaitingtimeforeachpairofplayersintheformatshownbythesample.Thenprintinalinethenumberofplayersservedbyeachtable.Noticethattheoutputmustbelistedinchronologicalorderoftheservingtime.Thewaitingtimemustberoundeduptoanintegerminute(s).Ifonecannotgetatablebeforetheclosingtime,theirinformationmustNOTbeprinted.SampleInput:920:52:0010008:00:0020008:02:0030020:51:0010008:10:005008:12:0010120:50:0010008:01:3015120:53:00101312
SampleOutput:
08:00:0008:00:00008:01:3008:01:30008:02:0008:02:00008:12:0008:16:30508:10:0008:20:001020:50:0020:50:00020:51:0020:51:00020:52:0020:52:000332
这题太鬼畜了,只能说目前AC了2015-7-31.做了一整天。但是这题里面我尝试使用了各种vector的属性事件甚么的。看起来太像在写C#了。
我的思路:
先找到最先空的一个窗口/桌子获得时间M,窗口编号mindex;
一、如果当前有普通或者Vip
if(mindex这个窗口是vip窗口)
{if当前有vip,vip特权
else(当前有普通)普通
else(这个窗口不是vip窗口)
可能在窗口中有一个vip窗口与这个窗口同时结束,获取mv,失败mv=-1;
if(获取成功,且有vip用户)用户特权
elseif(普通和vip用户同时存在,普通排在前面先)
elseif(普通和vip用户同时存在,vip排在前面先)
elseif(只有普通,普通排)
elseif(只有vip用户,vip用户排)
二、如果当前一个人也没有
if{①假如最先到的是普通的或者vip按时到的没有了,就最简单的普通人到这个mindex窗口;}
else
假如vip中最先到,获取满足这个vip且vip窗口的id最小,获取失败mv=-1(此时保证有vip)
if①当获取成功vip特权mv窗口
elseif②当获取失败vip普通mindex窗口
联动vector:
测试样例http://blog.csdn.net/cstopcoder/article/details/24561377
2015-8-1'target='_blank'>http://www.cplusplus.com/reference/vector/vector/
测试样例http://blog.csdn.net/cstopcoder/article/details/24561377
2015-8-100:56再联动一个思路超级清楚的http://blog.csdn.net/Yangsongtao1991/article/details/43317107
1.当有多个乒乓球台空闲时,vip顾客到了会使用最小id的vip球台,而不是最小id的球台,(这一要点我在做的时候忽略了)测试以下用例:2
10:00:00301
12:00:00301
51
3
输出正确结果应为:
10:00:0010:00:000
12:00:0012:00:000
00200
2.题目要求每对顾客玩的时间不超过2小时,那么当顾客要求玩的时间>2小时的时候,应该截断控制,测试以下用例:
218:00:00180120:00:00601111
输出的正确结果应为:
18:00:0018:00:000
20:00:0020:00:000
2
3.虽然题目中保证客户到达时间在08:00:00到21:00:00之间,但是根据最后的8个case来看,里面还是有不在这个时间区间内到达的顾客,所以建议还是稍加控制,测试以下用例:(这里我贴出来的代码是只控制21:00之前(不包括21:00)的数据保留没有舍掉8:00之前,2015-8-1测试通过)
121:00:00801111
输出的正确结果应为:
0
4.题目中说的rounduptoanintegerminutes是严格的四舍五入,需要如下做
wtime=(stime-atime+30)/60
而不是:
wtime=(stime-atime+59)/60(PS:这里他们写着四舍五入我没有看懂,后来看了自己的结果大了很多才想到是没有把秒换成分,然后“/”这个对于整型int来说是取整(取整数部分))
----------------------------
311:25:0010111:34:0010111:35:001001017
--------------------------
11:25:0011:25:00011:34:0011:34:00011:35:0011:35:0001100001000

评测结果

时间结果得分题目语言用时(ms)内存(kB)用户
8月01日00:41答案正确301026C++(g++4.7.2)13628datrilla

测试点

测试点结果用时(ms)内存(kB)得分/满分
0答案正确130814/14
1答案正确11802/2
2答案正确14362/2
3答案正确11802/2
4答案正确13082/2
5答案正确13081/1
6答案正确11803/3
7答案正确11803/3
8答案正确136281/1
#include<iostream>#include<vector>#include<iomanip>#include<algorithm>#defineCloseTime75600#defineStartTime28800usingnamespacestd;structTableTennisLine{intcomeTime,Servetime,playTime;TableTennisLine(intc,intp):comeTime(c),playTime(p){}};structTables{intCoUnt;intvacantTime;boolvip;Tables(intCoUnt,intvacantTime,boolvip):CoUnt(CoUnt),vacantTime(vacantTime),vip(vip){}};intDUreadln(vector<TableTennisLine>*Vip,vector<TableTennisLine>*Ordinary,intN){intss,ff,mm,play,tag,ccount;intindex;charMHc;for(index=0,ccount=0;index<N;index++){cin>>ss>>MHc>>ff>>MHc>>mm>>play>>tag;ss=ss*3600+ff*60+mm;if(ss<CloseTime){ccount++;play=play>120?120:play;play*=60;tag==1?(*Vip).push_back(TableTennisLine(ss,play)):(*Ordinary).push_back(TableTennisLine(ss,play));}}returnccount;}voidZhuoStar(vector<Tables>*Tabl,intStar,intENd,intcc,intvacant,boolvip){while(Star++<ENd)(*Tabl).push_back(Tables(cc,vacant,vip));}voidZhuoVip(vector<Tables>*Tabl,intStar,intENd,boolvip){intindex;for(;Star<ENd;Star++){cin>>index;index--;(*Tabl).operator[](index).vip=vip;}}boolTABLEcmp(constTableTennisLine&A,constTableTennisLine&B){returnA.comeTime<B.comeTime;}intfirst_vacnt_tables(vector<Tables>Tabl,intStar,intENd,int*M){intvacanttemp,mindex=0;(*M)=Tabl[0].vacantTime;for(;Star<ENd;Star++){vacanttemp=Tabl[Star].vacantTime;if(vacanttemp<*M){(*M)=vacanttemp;mindex=Star;}}returnmindex;}intvip_vacant_talbe(vector<Tables>Tabl,intStar,intENd,int*MM){intvacanttemp,mv=-1;for(;Star<ENd;Star++){vacanttemp=Tabl[Star].vacantTime;if(Tabl[Star].vip&&vacanttemp<=*MM)//满足且标号最小{(*MM)=vacanttemp;mv=Star;returnmv;}}returnmv;}voidprintchild2(inttimetemp){cout<<setw(2)<<setfill('0')<<timetemp;}voidprintchild1(inttimet){printchild2(timet/3600);cout<<":";timet%=3600;printchild2(timet/60);cout<<":";printchild2(timet%60);cout<<"";}voidXprint(intc,ints,intp){printchild1(c);printchild1(s);cout<<(p+30)/60<<endl;}voidGetThisTable(vector<Tables>*Tabl,intTindex,vector<TableTennisLine>*Turn,intv){if((*Tabl).operator[](Tindex).vacantTime>(*Turn).operator[](v).comeTime){(*Turn).operator[](v).Servetime=(*Tabl).operator[](Tindex).vacantTime;(*Tabl).operator[](Tindex).vacantTime+=(*Turn).operator[](v).playTime;(*Turn).operator[](v).playTime=(*Turn).operator[](v).Servetime-(*Turn).operator[](v).comeTime;}else{(*Turn).operator[](v).Servetime=(*Turn).operator[](v).comeTime;(*Tabl).operator[](Tindex).vacantTime=(*Turn).operator[](v).comeTime+(*Turn).operator[](v).playTime;(*Turn).operator[](v).playTime=0;}if((*Turn).operator[](v).Servetime<CloseTime)Xprint((*Turn).operator[](v).comeTime,(*Turn).operator[](v).Servetime,(*Turn).operator[](v).playTime);}intmain(){vector<TableTennisLine>Vip,Ordinary;vector<Tables>Tabl;intindex,N,K,M,v,mindex,mv,MM,lenv,leno;cin>>N;N=DUreadln(&Vip,&Ordinary,N);cin>>K>>M;ZhuoStar(&Tabl,0,K,0,StartTime,false);/*for(intv=0;v<Tabl.size();v++){cout<<Tabl[v].CoUnt<<"";Tabl[v].vip?cout<<"ok":cout<<"false";cout<<endl;}*/ZhuoVip(&Tabl,0,M,true);sort(Vip.begin(),Vip.end(),TABLEcmp);sort(Ordinary.begin(),Ordinary.end(),TABLEcmp);M=StartTime;mindex=0;lenv=Vip.size();leno=Ordinary.size();for(v=0,index=0;v+index<N&&M<CloseTime;){mindex=first_vacnt_tables(Tabl,1,K,&M);if(M<CloseTime){if(leno>index&&Ordinary[index].comeTime<=M||lenv>v&&Vip[v].comeTime<=M)//当前有队伍{if(Tabl[mindex].vip)//当前是vip窗口{if(lenv>v&&Vip[v].comeTime<=M){GetThisTable(&Tabl,mindex,&Vip,v++);Tabl[mindex].CoUnt++;//有vip用户特权;}else{GetThisTable(&Tabl,mindex,&Ordinary,index++);Tabl[mindex].CoUnt++;//普通用户;}}else//当前不是vip窗口{MM=M;mv=vip_vacant_talbe(Tabl,0,K,&MM);if(-1!=mv&&lenv>v&&Vip[v].comeTime<=M){GetThisTable(&Tabl,mv,&Vip,v++);Tabl[mv].CoUnt++;//有vip用户特权;}elseif(leno>index&&Ordinary[index].comeTime<=M&&lenv>v&&Vip[v].comeTime<=M&&Ordinary[index].comeTime<Vip[v].comeTime){GetThisTable(&Tabl,mindex,&Ordinary,index++);Tabl[mindex].CoUnt++;//有空闲窗口,普通用户先到;}elseif(leno>index&&Ordinary[index].comeTime<=M&&lenv>v&&Vip[v].comeTime<=M&&Ordinary[index].comeTime>=Vip[v].comeTime){GetThisTable(&Tabl,mindex,&Vip,v++);Tabl[mindex].CoUnt++;//有空闲窗口且vip窗口满,vip用户先到;}elseif(leno>index&&Ordinary[index].comeTime<=M){GetThisTable(&Tabl,mindex,&Ordinary,index++);Tabl[mindex].CoUnt++;//有空闲窗口,只有普通用户;}else{GetThisTable(&Tabl,mindex,&Vip,v++);Tabl[mindex].CoUnt++;//有空闲窗口,只有vip用户;}}}else//当前无队伍{if(leno>index&&(lenv>v&&Ordinary[index].comeTime<Vip[v].comeTime||lenv<=v)){GetThisTable(&Tabl,mindex,&Ordinary,index++);Tabl[mindex].CoUnt++;//有空闲窗口,当前无vip用户;}else{MM=Vip[v].comeTime;mv=vip_vacant_talbe(Tabl,0,K,&MM);if(lenv>v&&mv!=-1){GetThisTable(&Tabl,mv,&Vip,v++);Tabl[mv].CoUnt++;//有空闲窗口vip窗口未满,当前无普通用户}elseif(lenv>v){GetThisTable(&Tabl,mindex,&Vip,v++);Tabl[mindex].CoUnt++;//有空闲窗口且vip窗口满,当前无普通用户;}}}}}K--;for(index=0;index<K;index++)cout<<Tabl[index].CoUnt<<"";cout<<Tabl[index].CoUnt<<endl;system("pause");return0;}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: