2 2 6 08:00 09:00 5 08:59 09:59 2 6 08:00 09:00 5 09:00 10:00
11 6
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct people
{
char st[20];//来的时间
char et[20];//走的时间
int sum;
}arr[10010];
bool cmp(people a,people b)
{
return strcmp(a.et,b.et)<0;
}
int main()
{
int t,n,i;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=0;i<n;++i)
scanf("%d %s %s",&arr[i].sum,arr[i].st,arr[i].et);//以前写过一道题,这个时间可以用字符串比较,因为是按照一定格式写的,所以以字符串输入没问题
sort(arr,arr+n,cmp);
int cnt=arr[0].sum;
for(i=1;i<n;++i)
{
if(strcmp(arr[i-1].et,arr[i].st)>0)//如果有公共部分
{
cnt+=arr[i].sum;
}
else
{
cnt=arr[i].sum>cnt?arr[i].sum:cnt;
}
}
printf("%d\n",cnt);
}
return 0;
}//ac代码
/*
题意为:用最少的座位数迎接在不同时间段来的客人
*/
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[1000010];
int main()
{
int t,n,s;
int i,j;
int max;
int hour1,hour2,min1,min2;
scanf("%d",&t);
while(t--)
{
memset(a,0,sizeof(a));//一开始要清零
scanf("%d",&n);
max=-100;//纪录最小的座位
for(i=0;i<n;++i)
{
scanf("%d %d:%d %d:%d",&s,&hour1,&min1,&hour2,&min2);//s表示这个时间段来的人数
int sum1=hour1*60+min1;//每个时间都有一个sum1和sum2这个区间
int sum2=hour2*60+min2;
for(j=sum1;j<sum2;++j)//当两区间有公共部分时,数组a[i]刚才也存了一个数了
{
a[j]+=s;
if(a[j]>max)//当数组a纪录的座位数大于max,要把max更新
max=a[j];
}
}
printf("%d\n",max);
}
return 0;
}版权声明:本文为博主原创文章,未经博主允许不得转载。
HDU杭电4883 TIANKENG’s restaurant
原文:http://blog.csdn.net/yuzhiwei1995/article/details/47188817