USACO Milking Cows(模拟)

2015-07-20 17:07:17 ? 作者: ? 浏览: 3


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

/*
ID: eashion
LANG: C++
TASK: milk2
*/
#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         #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 ,res1,res2); return 0; } 
       
      
     
    
   

?

-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: