模拟考试1 BestCoder Round #2 TIANKENG’s restaurant

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xj13821328013/article/details/77773635

本以为是区间覆盖问题,如果有时间重叠的部分,就加上,虽然区间覆盖掌握的也不是很好,不知道是按照起始时间还是离开时间排序,之后会再好好复习这方面的习题

起始代码

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
struct node
{
    int st;
    int et;
    int num;
    friend bool operator < (node a, node b)
    {
        return a.st<b.st;
    }
}ma[10010];
int main()
{
    int t,n,m;
    scanf("%d",&t);
    int a,b,c,d;
    while(t--)
    {
        scanf("%d",&n);
        for(int i=0; i<n; i++)
        {
            scanf("%d %d:%d %d:%d",&m,&a,&b,&c,&d);
            ma[i].st=a*60+b;
            ma[i].et=c*60+d;
            ma[i].num=m;
        }
        sort(ma,ma+n);
        //for(int i=0; i<n; i++)
        //{
          //  printf("%d %d %d\n",ma[i].num,ma[i].st,ma[i].et);
        //}
        int mint=ma[0].st,maxt=ma[0].et;
        int ans=ma[0].num;
        for(int i=1; i<n; i++)
        {
            if(maxt>ma[i].st)
            {
                maxt=ma[i].et;
                ans+=ma[i].num;
            }
        }
        printf("%d\n",ans);
    }
}

后来学到了按照离开时间进行排序(也不知道为什么),还有ans的更新,但是也是错的,原来这不是区间覆盖问题,而是在连续区间覆盖的时候,第一个区间走之后的椅子可以供下一个区间和下下个区间的人使用,看了正解就自然明白了

#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;
                //printf("%d ",a[j]);
                if(a[j]>max)//当数组a纪录的座位数大于max,要把max更新
                    max=a[j];
            }
            //printf("\n");
        }
        printf("%d\n",max);
    }
    return 0;
}


猜你喜欢

转载自blog.csdn.net/xj13821328013/article/details/77773635
今日推荐