题解 P1007 独木桥
Posted lixiao189
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题解 P1007 独木桥相关的知识,希望对你有一定的参考价值。
重要思路:
这道题目如果有两个人相遇,那么其实由于两个人相遇后转身的时间并不会对答案做出贡献,所以其实就可以把两个人相遇后不是看成转身而是看成穿过对方(有点诡异)
之后就是一个简单问题了
一个士兵如果要下桥,由于我们现在有了一个士兵与士兵相遇掉头等于不掉头的设定,我们可以得到第i个士兵的下桥最小时间与其位置x(i)的关系为
[ min(x_i,l+1-x_i) ]
下桥最大时间为
[ max(x_i,l+1-x_i) ]
由于我们要让所有的士兵都要下桥,所以我们的总下桥时间就是所有士兵中下桥时间的最大值,所以我们最后把每个士兵的下桥时间最小值扫一遍,找到其中的最大值,就是所有士兵的下桥最短时间,我们在扫一遍所有士兵下桥时间的最大值,这其中的最大值就是所有士兵下桥时的最大值
代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 5005;
int l; //桥的长度
int n; //士兵的数量
int arr[N];
int ans1[N],ans2[N];
int main(){
scanf ("%d%d",&l,&n);
for (int i=1;i<=n;i++) scanf ("%d",&arr[i]);
if (n==0){
printf ("0 0
");
return 0;
}
for (int i=1;i<=n;i++){
ans1[i]=min(arr[i],l+1-arr[i]);
ans2[i]=max(arr[i],l+1-arr[i]);
}
int maxx=-99999999,minx=-99999999;
for (int i=1;i<=n;i++){
minx=max(ans1[i],minx);
maxx=max(ans2[i],maxx);
}
printf ("%d %d
",minx,maxx);
return 0;
}
以上是关于题解 P1007 独木桥的主要内容,如果未能解决你的问题,请参考以下文章