专栏文章
题解:P13916 [PO Final 2024] 瓦萨滑雪节 / Vasaloppet
P13916题解参与者 9已保存评论 9
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 9 条
- 当前快照
- 1 份
- 快照标识符
- @mio1qh5q
- 此快照首次捕获于
- 2025/12/02 11:56 3 个月前
- 此快照最后确认于
- 2025/12/02 11:56 3 个月前
大体思路:
查看本题的时空限制,我们可以发现本题空间格外大,这么大的空间,足以让我们开 次方大小的
bool 数组 , 表示第 秒开始的一秒之内有广告,反之没有。我们可以先算出从第 秒开始滑雪,错过的节目时间,接着将滑雪时间逐步向后移,直到没法移为止,取这之中错过节目时间的最小值就可以了。对于每一次移动,滑雪时间会包含一个新的时间点,去掉一个旧的时间点,而我们只需要在前一个滑雪时间错过节目时间的基础上处理这两个时间点造成的影响即可,时间复杂度就不高了。如果加入的时间是广告,那么现在错过节目的时间就会减一;如果去掉的时间是广告,那么现在错过节目的时间就会加一。
代码:
CPP#include<bits/stdc++.h>
using namespace std;
bool z[1000000005];
int main(){
int n,t,s;
scanf("%d%d%d",&n,&t,&s);
int l,r;
for(int i=1;i<=n;i++){
scanf("%d%d",&l,&r);
for(int j=l;j<r;j++){ //记录广告时间。
z[j]=1;
}
}
int sum=0,ans=0;
for(int i=0;i<s;i++){ //计算从 0 开始滑雪错过的节目时间。
if(!z[i])sum++;
}
ans=sum;
for(int i=1;i<=t-s;i++){ //后移滑雪时间,求答案。
if(!z[i+s-1])sum++;
if(!z[i-1]){sum--; }
ans=min(ans,sum);
}
printf("%d",ans);
return 0;
}
相关推荐
评论
共 9 条评论,欢迎与作者交流。
正在加载评论...