hoj 1072 活动安排问题

活动安排问题

Time Limit:1000MS  Memory Limit:65536K
Total Submit:139 Accepted:3

Description

假设要在一会场里安排一批活动,并希望尽可能多的安排活动。设计一个有效的算法计算当所安排的活动最多时,会场的使用时间。会场的使用时间是指活动占用会场的时间,例如一活动在1到23分占用会场,那么会场的使用时间就是23分。
编程任务:
对于给定的k个待安排的活动,编程计算安排的活动最多时会场使用时间。

Input

输入数据是由多组测试数据组成。每组测试数据输入的第一行有1 个正整数k(k≤8500),表示有k个待安排的活动。接下来的k行中,每行有2个正整数,分别表示k个待安排的活动开始时间和结束时间。时间以0 点开始的分钟计。

Output

对应每组输入,输出的每行是计算出的会场使用时间。

Sample Input

5

1 23

12 28

25 35

27 80

36 50

 

Sample Output

49

 

Source

wangzhiqun

[Submit]   [Go Back]   [Status]   [Discuss]

 

 

// 13222 wupanlei 1072 Accepted 952K 399MS G++ 0.8K 2009-06-24 08:20:57 
#include  < iostream >
#include 
< algorithm >
#define  MAX 9000
using   namespace  std;
typedef 
struct  node
{
    
int  s;
    
int  e;
}Data;
class  Party
{
private :
    Data data[MAX];
    
int  summ;
    
int  n;
public :
    Party();
    
void  Set( int  nn);
    
// friend bool comp(int a,int b);
     int  CalSum();
};
bool  comp(node a,node b)
{
    
return  a.e < b.e;
}
Party::Party()
{
    summ
= 0 ;
}
void  Party::Set( int  nn)
{
    n
= nn;
    
int  i;
    
for (i = 0 ;i < n;i ++ )
    {
        cin
>> data[i].s >> data[i].e;
    }
}
int  Party::CalSum()
{
    
int  j = 0 ,i;
    sort(data
+ 0 ,data + n,comp);
    summ
= data[ 0 ].e - data[ 0 ].s + 1 ;
    
for (i = 1 ;i < n;i ++ )
    {
        
if (data[i].s >= data[j].e)
        {
            summ
+= data[i].e - data[i].s + 1 ;
            j
= i;
        }
    }
    
return  summ;
}
int  main()
{
    
int  nn;
    
while (cin >> nn)
    {
        Party p;
        p.Set(nn);
        cout
<< p.CalSum() << endl;
    }
    
return   0 ;
}

 

你可能感兴趣的:(活动)