正文

【练习试题】:办公室失窃案2008-10-16 14:28:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/1mi2/38934.html

分享到:

【练习试题】:办公室失窃案 Time Limit:1000MS  Memory Limit:65536KTotal Submit:8 Accepted:1 Description 有一天,某办公室发生了失窃案,为了搜集线索,每个职员被要求说明自己在那些时间段里离开了办公室.现在你写一个程序,分析出在这一天中那些时间段办公室空无一人. Input 输入(包含多个测试数据):第一行是一个整数n(0<=n<=100),表示职员的总数,接下来是n段职员自述.每段职员自述的第一行是一个整数ti(0<=ti<=10),接下来ti行给出了该职员不在办公室的所有时间段.每个时间段都是一下面的形式给出的:起始时间-终止时间,其中起始时间和终止时间都是以12小时表示法给出的,格式为hh:mmnn,其中nn为am(上午)或者pm(下午)hh的第一个0可以被省略.终止时间>起始时间.所有时刻均不早于8:00am,也不晚于9:00pm.输入保证了同一职员的任意两个时间段步重叠也不相邻. Output 输出:包括了所有无人的时间段,每个时间段独占一行,格式类似与输入文件,但是hh的第一个0必须被输出.任意两个时间段不能重叠也不能相邻.如果没有相应的时间段需要被输出,则输出”No” 注:12:00pm表示中午12点(输入输出都按这个来) Sample Input 3 2 8:00am-9:00am 5:00pm-9:00pm 1 8:00am-1:00pm 2 8:00am-10:00am 6:00pm-9:00pm Sample Output 08:00am-09:00am Source 没得话讲! 这题目*&^%^$%*^% 不过有蛮多细节没考虑到的! 题目算法还是很简单的 #include<stdio.h>int a[30][80];int main(){// freopen("WORDS7.in","r",stdin); int n,N,i,j,m,t,tt; int mark,g=0; int sn,sm,en,em; char str[20]; while(scanf("%d",&n)!=EOF) {  if(n==0) break;  N=n;  g=0; for(i=0;i<24;i++)  for(j=0;j<60;j++)   a[i][j]=0;  while(n--)  {   scanf("%d",&m);   while(m--)   {    scanf("%s",str);    if(str[1]==':')    {     sn=str[0]-'0';     if(str[4]=='p') sn+=12;     sm=(str[2]-'0')*10+str[3]-'0';     i=7;    }    else if(str[2]==':')    {     sn=(str[0]-'0')*10+str[1]-'0';     if(str[5]=='p'&&str[1]!='2')     {      sn+=12;     }     sm=(str[3]-'0')*10+str[4]-'0';     i=8;    }    if(str[i+1]==':')    {     en=str[i]-'0';     if(str[i+4]=='p') en+=12;     em=(str[i+2]-'0')*10+str[i+3]-'0';    }    else if(str[i+2]==':')    {     en=(str[i]-'0')*10+str[i+1]-'0';     if(str[i+5]=='p'&&str[i+1]!='2')     {      en+=12;     }     em=(str[i+3]-'0')*10+str[i+4]-'0';    }    if(sn==en)    {     for(i=sm;i<=em;i++)      a[sn][i]++;     continue;    }    for(i=sm;i<60;i++)     a[sn][i]++;    for(i=sn+1;i<en;i++)     for(j=0;j<60;j++)      a[i][j]++;    for(j=0;j<=em;j++)      a[en][j]++;   }  }  mark=0;  for(i=0;i<24;i++)   for(j=0;j<60;j++)   {    if(mark==0&&a[i][j]==N)    {     mark=1;     g=1;     t=i;     if(t>12)     {      t-=12;      if(t<10) printf("0%d:",t);      else  printf("%d:",t);      if(j<10)       printf("0%dpm-",j);      else printf("%dpm-",j);     }     else if(t==12)     {        printf("%d:",t);      if(j<10)       printf("0%dpm-",j);      else printf("%dpm-",j);     }     else      {      if(t<10) printf("0%d:",t);      else  printf("%d:",t);      if(j<10)       printf("0%dam-",j);      else printf("%dam-",j);     }    }    else if(mark==1&&a[i][j]!=N)    {     mark=0;     if(j==0)     {      t=i-1;      tt=59;      if(t>12)      {       t-=12;       if(t<10) printf("0%d:",t);      else  printf("%d:",t);      if(tt<10)       printf("0%dpm\n",tt);      else printf("%dpm\n",tt);      }      else if(t==12)      {        printf("%d:",t);      if(tt<10)       printf("0%dpm\n",tt);      else printf("%dpm\n",tt);      }      else      {       if(t<10) printf("0%d:",t);       else  printf("%d:",t);       if(tt<10)        printf("0%dam\n",tt);       else printf("%dam\n",tt);      }     }     else      {      t=i;tt=j-1;      if(t>12)      {       t-=12;       if(t<10) printf("0%d:",t);      else  printf("%d:",t);      if(tt<10)       printf("0%dpm\n",tt);      else printf("%dpm\n",tt);      }      else if(t==12)      {        printf("%d:",t);      if(tt<10)       printf("0%dpm\n",tt);      else printf("%dpm\n",tt);      }      else      {       if(t<10) printf("0%d:",t);      else  printf("%d:",t);      if(tt<10)       printf("0%dam\n",tt);      else printf("%dam\n",tt);      }     }    }   }   if(g==0) printf("No\n");   }   return 0;  }  

阅读(1685) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册