专栏文章
P1007 独木桥
算法·理论参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @minoupwt
- 此快照首次捕获于
- 2025/12/02 05:55 3 个月前
- 此快照最后确认于
- 2025/12/02 05:55 3 个月前
题意:
有n名士兵在线段上,士兵i可以往左边或右边任意一边移动,当两名士兵相遇时他们会分别转身
问:最少要多少时间,最久要多少时间
思路:
首先发现当两名士兵相遇时,因为两人都要转向,而两名士兵的速度、特征都相等,所以我们可以当这两名士兵是直接穿过对方继续前进

既然士兵可以直接穿过其他士兵,这就说明每个士兵都是独立的个体,所以士兵i到桥两边的时间就是他直接走到桥两边的时间
所以最少的时间就是每名士兵离开桥的小值的最大值,即:
CPPminn=max(minn,min(a[i],l-a[i]+1));
最大的时间就是每名士兵离开桥的大值的最大值,即:
CPPmaxx=max(maxx,max(a[i],l-a[i]+1));
程序:
CPP#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn(1e5+10);
int l,n,minn(0),maxx(0);
int a[maxn];
int main(){
cin>>l>>n;
for(int i(1);i<=n;i++){
cin>>a[i];
// cout<<l-a[i]+1<<'\n';
minn=max(minn,min(a[i],l-a[i]+1));
maxx=max(maxx,max(a[i],l-a[i]+1));
}
cout<<minn<<' '<<maxx<<'\n';
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...