【练习试题】:办公室失窃案 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; }

评论