首页 > 代码库 > zoj 3787 Access System

zoj 3787 Access System

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5274

 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 using namespace std; 5  6 int n,l; 7 char str[100]; 8 int ans[100000]; 9 struct node10 {11     int h,m,s;12     int id;13     bool operator <(const node &a)const14     {15         return (h<a.h)||(h==a.h&&m<a.m)||(h==a.h&&m==a.m&&s<a.s);16     }17 }p[200020];18 19 int main()20 {21     int t;22     scanf("%d",&t);23     while(t--)24     {25         scanf("%d%d",&n,&l);26         for(int i=0; i<n; i++)27         {28             scanf("%s",str);29             p[i].h=(str[0]-0)*10+(str[1]-0);30             p[i].m=(str[3]-0)*10+(str[4]-0);31             p[i].s=(str[6]-0)*10+(str[7]-0);32             p[i].id=i+1;33         }34         sort(p,p+n);35         int t1=0;36         node pos;37         /*for(int i=0; i<n; i++)38         {39             printf("%d %d %d\n",p[i].h,p[i].m,p[i].s);40         }*/41         for(int i=0; i<n; i++)42         {43            if(i==0)44            {45                ans[t1++]=p[i].id;46                pos.s=(p[i].s+l)%60;47                pos.m=(p[i].m+(p[i].s+l)/60)%60;48                pos.h=p[i].h+((p[i].m+(p[i].s+l)/60)/60);49            }50            else51            {52                //printf("%d %d %d\n",pos.h,pos.m,pos.s);53                if(p[i].h>pos.h)54                {55                    ans[t1++]=p[i].id;56                    pos.s=(p[i].s+l)%60;57                    pos.m=(p[i].m+(p[i].s+l)/60)%60;58                    pos.h=p[i].h+((p[i].m+(p[i].s+l)/60)/60);59                }60                else if(p[i].h==pos.h&&p[i].m>pos.m)61                {62                    ans[t1++]=p[i].id;63                    pos.s=(p[i].s+l)%60;64                    pos.m=(p[i].m+(p[i].s+l)/60)%60;65                    pos.h=p[i].h+((p[i].m+(p[i].s+l)/60)/60);66                }67                else if(p[i].h==pos.h&&p[i].m==pos.m&&p[i].s>pos.s)68                {69                    ans[t1++]=p[i].id;70                    pos.s=(p[i].s+l)%60;71                    pos.m=(p[i].m+(p[i].s+l)/60)%60;72                    pos.h=p[i].h+((p[i].m+(p[i].s+l)/60)/60);73                }74                else if(p[i].h==pos.h&&p[i].m==pos.m&&p[i].s==pos.s)75                {76                    ans[t1++]=p[i].id;77                    pos.s=(p[i].s+l)%60;78                    pos.m=(p[i].m+(p[i].s+l)/60)%60;79                    pos.h=p[i].h+((p[i].m+(p[i].s+l)/60)/60);80                }81            }82         }83         printf("%d\n",t1);84         sort(ans,ans+t1);85         for(int i=0; i<t1; i++)86         {87             if(i==0)88             {89                 printf("%d",ans[i]);90             }91             else92             {93                 printf(" %d",ans[i]);94             }95         }96         printf("\n");97     }98     return 0;99 }
View Code

 

zoj 3787 Access System