#include <stdio.h>
#include <stdlib.h>
#define MAX_TIME 30000
int numOfReports;
//start[endTime]表示结束时间为endTime的报告的开始时间
//时间上限远比报告数量的上限小,采用这样的数据结构可以节省内存,而且连对结束时间排序都不用了,又节省了时间,虽然总要遍历所有可能的结束时间点[1, 30000],但总体上还是划算
//技巧:给数组下标赋予其他意义,可充分利用空间,利用下标的有序性可提高效率
int start[MAX_TIME + 1];
int main(){
scanf("%d", &numOfReports);
int startTime, endTime;
int report;
for (report = 1; report <= numOfReports; report++){
scanf("%d%d", &startTime, &endTime);
if (startTime > start[endTime])
start[endTime] = startTime;
}
int result = 0;
int preEndTime = 0;
for (endTime = 1; endTime <= MAX_TIME; endTime++)
if (start[endTime] >= preEndTime + 1){
result++;
preEndTime = endTime;
}
printf("%d\n", result);
return 0;
}
URAL 1203 Scientific Conference (贪心 + 优化)
最新推荐文章于 2018-05-07 21:47:52 发布