专栏文章
题解:P13517 [KOI 2025 #2] 障碍物
P13517题解参与者 2已保存评论 1
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @miommlds
- 此快照首次捕获于
- 2025/12/02 21:41 3 个月前
- 此快照最后确认于
- 2025/12/02 21:41 3 个月前
题意
本题要求我们以最小的移动次数跳过所有障碍物,其中每个障碍物必须通过跳跃动作越过。关键在于每次跳跃必须从障碍物前一格开始,并确保相邻障碍物之间的距离大于一。
思路分析
- 障碍物合法性检查:若存在两个相邻障碍物距离为 ,则无法跳过,直接输出 。
- 模拟移动过程: 初始化当前位置为 ,移动次数为 。 遍历每个障碍物,计算从当前位置到障碍物前一格所需的步数。 每到达一个障碍物前一格,执行一次跳跃,更新位置和移动次数。
复杂度分析
时间复杂度: ,仅需遍历一次障碍物数组。
空间复杂度: ,存储障碍物位置。
代码
CPP#include <bits/stdc++.h>
using namespace std;
int a[3000005];
int main() {
int n,t;
cin >> n;
for(int i = 1;i < n;i ++){
scanf("%d",&t);
a[t] ++;
}
scanf("%d",&t);
a[t] ++;
int d = t;
int ans = 0;
for(int i = 0;i <= d;i ++){
if(a[i]){
cout << -1;
return 0;
}
else if(a[i + 2]) ans ++;
else ans ++,i ++;
}
cout << ans;
return 0;
}
相关推荐
评论
共 1 条评论,欢迎与作者交流。
正在加载评论...