题目大意,给定一些时间段,表示被占用,求解一天之内没有被占用的时间(以秒为单位)。
额,对于这题来说,也就是这样的了,一个hash判断,hash[i]表示第i秒是否被占用,占用为true,否则false,然后暴力枚举就搞定~但是试想如果这题题目数据量巨大,比如说统计一年的数据量?
肿么破?暴力枚举是不行的了,那怎么办呢,对于区间统计的题目啊,线段树什么的最好用了,所以可以通过线段树来搞定,不过对于资格赛的题目来说,就暴力枚举就行了,要加上线段树什么的,谁还来参加啊~
(1)暴力枚举hash版
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
bool hash[24*60+6]; //标记每分钟是否有占用
int main()
{
int n;
while(~scanf("%d",&n))
{
int h1,h2,m1,m2;
memset(hash,false,sizeof(hash));
for(int i=0;i<n;i++)
{
scanf("%d:%d",&h1,&m1);
scanf("%d:%d",&h2,&m2);
int start = h1*60 + m1;
int end = h2*60 + m2;
for(int l=start;l<end;l++) hash[l] = true;
}
int ans = 0;
for(int i=0;i<24*60;i++)
if(!hash[i]) ans++;
printf("%d\n",ans);
}
system("pause");
return 0;
}
(2)线段树版,,,,,暂时就不贴了,如果想看的话,等以后再说吧