hdu 4509

今天做hdu 1556题的时候,觉得与此题一个大牛这题思想一样就找出这题的代码

//大牛的代码

 

#include <cstdio>

#include <cstring>

int s[1445];

int main()

{

    int n;

    while (scanf("%d",&n) != EOF)

    {

        memset(s,0,sizeof(s));

        int a,b,c,d;

        while (n--)

        {

            scanf("%d:%d %d:%d",&a,&b,&c,&d);

            s[a*60+b] += 1;

            s[c*60+d] -= 1;

        }

        int ans = 0;

        int ss = 0;

        for (int i = 0;i < 1440;i++)

        {

            ss += s[i];

            if (!ss)

                ans++;

        }

        printf("%d\n",ans);

    }

}

 




//自己的代码



 

#include<stdio.h>

#include<stdlib.h>

#define N 500005

struct op

{

    int b,e;

}p[N],cur;

int cmp(const void *a,const void *b)

{

    struct op *c,*d;

    c=(struct op *)a;

    d=(struct op *)b;

    if(c->b==d->b)

        return c->e-d->e;

    return c->b-d->b;

}

int main()

{

    int i,n,sum,j,a,b,c,d;

    while(scanf("%d",&n)!=EOF)

    {

        sum=0;

        for(i=0;i<n;i++)

        {

            scanf("%d:%d %d:%d",&a,&b,&c,&d);

            a=a*60+b;c=c*60+d;

            p[i].b=a;p[i].e=c;

        }

        p[n].b=24*60;p[n].e=24*60;

        qsort(p,n,sizeof(p[0]),cmp);

        sum=p[0].b;

        cur=p[0];

        for(i=1;i<=n;i++)

        {

            if(p[i].b>=cur.e)

            {

                sum=sum+p[i].b-cur.e;

            }

            if(cur.e<p[i].e)

            {cur.e=p[i].e;}

            

        }

        printf("%d\n",sum);

    }

    return 0;

}


 

 

你可能感兴趣的:(HDU)