A more simulated problem.
After 50 rounds of the appearance of AC ... After AC My Sky stars are bright.
#include <iostream>#include<cstring>#include<cmath>#include<algorithm>#include<cstdio>#include<map>#include<queue>#include<vector>using namespacestd;structx{intSt,ml,len; BOOLtag;} s[20000+Ten];intn,m,k;BOOLflag[ -+Ten],g[ -+Ten];intans[ -+Ten],w[ -+Ten];queue<int>p,v;BOOLcmpConstX&a,ConstX&B) {returna.st<B.st;}BOOLCMP2 (ConstX&a,ConstX&B) {returna.ml<b.ml;}voidinit () {memset (ans,0,sizeofans); memset (Flag,0,sizeofflag); for(intI=1; i<= -; i++) w[i]=8* -* -;}voidRead () {scanf ("%d",&N); for(intI=1; i<=n;i++) { intHH,MM,SS; scanf"%d:%d:%d",&hh,&mm,&SS); S[i].st=hh*3600+mm* -+SS; scanf ("%d", &s[i].len); S[i].len=min ( -*s[i].len,2* -* -); CIN>>S[i].tag; } scanf ("%d%d",&m,&k); for(intI=1; i<=k;i++) {intId cin>>id; flag[id]=1;} Sort (S+1, s+1+n,cmp); s[0].st=999999999;}voidWork () {intsz=0, pre=0; while(1) { if(sz==n) Break; intmin=999999999; for(intI=1; i<=m;i++) min=min (min,w[i]); for(intI=pre+1; i<=n;i++) { if(s[i].st>min) Break; if(s[i].tag==0) P.push (i);ElseV.push (i); Pre=i; } memset (G,0,sizeofg); for(intI=1; i<=m;i++)if(w[i]==min) g[i]=1; if(P.empty () &&V.empty ()) {SZ++; pre++;intFind=0; if(s[pre].tag==1) { for(intI=1; i<=m;i++) if(flag[i]==1&&w[i]<=s[pre].st) {W[i]=s[pre].st+S[pre].len; S[PRE].ML=s[pre].st; Find=1; if(s[pre].ml< +* -* -) ans[i]++; Break; } if(find==1)Continue; for(intI=1; i<=m;i++) if(flag[i]==0&&w[i]<=s[pre].st) {W[i]=s[pre].st+S[pre].len; S[PRE].ML=s[pre].st; Find=1; if(s[pre].ml< +* -* -) ans[i]++; Break; } } Else { for(intI=1; i<=m;i++) if(w[i]<=s[pre].st) {W[i]=s[pre].st+S[pre].len; S[PRE].ML=s[pre].st; Find=1; if(s[pre].ml< +* -* -) ans[i]++; Break; } } Continue; } while(!V.empty ()) { intFail=1, id=V.front (); for(intj=1; j<=m;j++) if(flag[j]&&G[j]) {SZ++; S[ID].ML=W[j]; W[J]=s[id].ml+S[id].len; Fail=0; g[j]=0; V.pop (); if(s[id].ml< +* -* -) ans[j]++; Break; } if(fail==1) Break; } while(1) { inttmp1=0, tmp2=0, id; if(P.empty () &&v.empty ()) Break; if(! P.empty ()) Tmp1=p.front ();if(! V.empty ()) tmp2=V.front (); if(S[tmp1].st<s[tmp2].st) Id=tmp1;ElseId=TMP2; intFail=1; for(intj=1; j<=m;j++) if(G[j]) {sz++; S[ID].ML=W[j]; W[J]=s[id].ml+S[id].len; Fail=0; g[j]=0;if(s[id].tag==0) P.pop ();ElseV.pop (); if(s[id].ml< +* -* -) ans[j]++; Break; } if(fail==1) Break; } }}voidPrin () {sort (s+1, s+1+N,CMP2); for(intI=1; i<=n;i++) { if(s[i].ml>= +* -* -)Continue; intFen= (s[i].ml-s[i].st+ -)/ -; printf ("%02d:", s[i].st/3600); s[i].st=s[i].st-s[i].st/3600*3600; printf ("%02d:", s[i].st/ -); s[i].st=s[i].st-s[i].st/ -* -; printf ("%02d", S[i].st); printf ("%02d:", s[i].ml/3600); s[i].ml=s[i].ml-s[i].ml/3600*3600; printf ("%02d:", s[i].ml/ -); s[i].ml=s[i].ml-s[i].ml/ -* -; printf ("%02d", s[i].ml); printf ("%d\n", Fen); } for(intI=1; i<=m;i++) {printf ("%d", Ans[i]); if(i<m) printf (" "); Elseprintf"\ n"); }}intMain () {init (); Read (); Work (); Prin (); return 0;}
PAT (Advanced level) 1026. Table Tennis (30)