andre_joy

导航

USACO milk2

题意:n个农夫给n只羊喂奶,分别给出他们的起始时间和结束时间,求重叠的和没有重叠的最长时间。

mark:wa了一次。变量max1忘记每次遇到不重叠的时候需要重新初始化了。。

代码:

/*
ID: andre_j2
LANG: C
TASK: milk2
*/
#include <stdio.h>
#include <stdlib.h>

typedef struct
{
    int st,en;
}fa;

int cmp(const void *a, const void *b)
{
    fa *p = (fa *)a, *q = (fa *)b;
    if(p->st != q->st) return p->st - q->st;
    return p->en - q->en;
}

fa f[5010];

main () {
    freopen("milk2.in", "r", stdin);
    freopen("milk2.out", "w", stdout);
    int n,max1,max2,end,m;
    int i;
    scanf("%d", &n);
    for(i = 0; i < n; i++) scanf("%d%d", &f[i].st, &f[i].en);
    qsort(f, n, sizeof(f[0]), cmp);
    max1 = m = f[0].en - f[0].st;
    max2 = 0;
    end = f[0].en;
    for(i = 1; i < n; i++)
    {
        if(f[i].st > end)
        {
            if(f[i].st - end > max2) max2 = f[i].st - end;
            end = f[i].en;
            if(m > max1) max1 = m;
            m = f[i].en - f[i].st;
        }
        else if(f[i].en > end) {m += f[i].en - end; end = f[i].en;}
    }
    if(m > max1) max1 = m;
    printf("%d %d\n", max1, max2);
    exit (0);
}

posted on 2012-07-05 01:40  andre_joy  阅读(273)  评论(0编辑  收藏  举报