1458: Booking
Time Limit: 3 Sec
Memory Limit: 128 MB
Submit: 116
Solved: 27
[ Submit][ Status][ Web Board]
Description
Input
Output
Sample Input
4
2 120
1 2013-07-01 15:59 2013-07-08 16:30
2 2013-07-08 17:30 2013-07-15 12:00
3 60
65 2013-07-08 14:30 2013-07-08 16:00
32 2013-07-01 16:00 2013-07-15 12:00
91 2013-07-01 16:00 2013-07-08 15:00
2 360
a7 2016-02-21 14:00 2016-02-28 21:00
xx 2016-03-01 01:00 2016-03-02 12:57
2 60
a9 2016-02-21 14:00 2016-02-28 11:00
a8 2016-02-28 12:00 2016-03-11 21:00
Sample Output
2
3
1
1
题意:开房的预定时间和离开时间,下一个要重新开一间那么这次预定时间必须要在前面开房的离开时+打扫时间之内。
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
typedef struct nnn
{
int st;
int et;
}node;
node book[5005];
int cmp(node a,node b)
{
if(a.st==b.st)
return a.et<b.et;
return a.st<b.st;
}
int Fun(int a,int b)
{
if(a<=b)
return 0;
return 1;
}
int main()
{
int i,i1,j,t,c,b,ans,sy,ey,sm,em,sd,ed,sh,eh;
int d[14]={0,31,28,31,30,31,30,31,31,30,31,30,31};
char str[30];
scanf("%d",&t);
while(t--)
{
ans=1;
scanf("%d%d",&b,&c);
for(i=0;i<b;i++)
{
scanf("%s",str);
scanf("%d-%d-%d %d:%d %d-%d-%d %d:%d",&sy,&sm,&sd,&sh,&book[i].st,&ey, &em,&ed, &eh, &book[i].et);
book[i].st+=(sh*60+(sd-1)*24*60);
for(i1=2013;i1<=sy; i1++)
if(i1<sy)
{
book[i].st+=(365*24*60);
if(i1%400==0||i1%4==0&&i1%100!=0)
book[i].st+=(24*60);
}
else
{
if((i1%400==0||i1%4==0&&i1%100!=0)&&2<sm)
book[i].st+=(24*60);
for(j=1;j<sm; j++)
book[i].st+=(d[j]*60*24);
}
book[i].et+=(eh*60+c+(ed-1)*24*60);
for( i1=2013;i1<=ey; i1++)
if(i1<ey)
{
book[i].et+=(365*24*60);
if(i1%400==0||i1%4==0&&i1%100!=0)
book[i].et+=(24*60);
}
else
{
if((i1%400==0||i1%4==0&&i1%100!=0)&&2<em)
book[i].et+=(24*60);
for(j=1;j<em; j++)
book[i].et+=(d[j]*60*24);
}
}
sort(book,book+b,cmp);
int tim[5005],k=0;
tim[k++]=book[0].et;
for(i=1;i<b;i++)//关建要注意的
{
for(j=0;j<k;j++)
if(Fun(tim[j],book[i].st)==0)
break;
if(j==k){
ans+=1;
tim[k++]=book[i].et;
}
else
tim[j]=book[i].et;
}
printf("%d\n",ans);
}
return 0;
}