码迷,mamicode.com
首页 > 其他好文 > 详细

USACO Milking Cows(模拟)

时间:2015-07-14 22:46:53      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:usaco

题目请点我
题意:
题意很简单,最开始的时候想要用优先队列存储时间,用map存储对应时间起点与终点。按时间轴顺序排列的思路是没错的,但是忽略了很重要的一点,一个时间起点可能会有多个对应的时间终点。改用结构体存储,定义cmp,得到时间轴。有两个变量表示总的时间起点和终点,注意起点与终点变换的条件,不断向后遍历就可以了。
代码实现:

/*
ID: eashion
LANG: C++
TASK: milk2
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#define MAX 5050

using namespace std;

struct node{
    int Tstart,Tend;
};

int N;
int T1;//起点
int T2;//终点
int res1,res2;
node Nlis[MAX];
bool cmp(const node a,const node b){
    if( a.Tstart != b.Tstart ){
        return a.Tstart < b.Tstart;
    }
    return a.Tend < b.Tend;
}
int main()
{
    freopen("milk2.in","r",stdin);
    freopen("milk2.out","w",stdout);
    scanf("%d",&N);
    for( int i = 0; i < N; i++ ){
        scanf("%d%d",&Nlis[i].Tstart,&Nlis[i].Tend);
    }
    sort(Nlis,Nlis+N,cmp);
    T1 = Nlis[0].Tstart;
    T2 = Nlis[0].Tend;
    res1 = res2 = 0;
    for( int i = 0; i < N; i++ ){
        if( T2 >= Nlis[i].Tstart ){
            T2 = max( T2,Nlis[i].Tend );
            res1 = max( T2-T1,res1 );
        }
        else{
            T1 = Nlis[i].Tstart;
            res2 = max( res2,T1-T2 );
            T2 = Nlis[i].Tend;
        }
    }
    printf("%d %d\n",res1,res2);
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

USACO Milking Cows(模拟)

标签:usaco

原文地址:http://blog.csdn.net/eashion1994/article/details/46882537

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!