标签:最大 pac for space ret 就是 ace code main
这道题目如果有两个人相遇,那么其实由于两个人相遇后转身的时间并不会对答案做出贡献,所以其实就可以把两个人相遇后不是看成转身而是看成穿过对方(有点诡异)
之后就是一个简单问题了
一个士兵如果要下桥,由于我们现在有了一个士兵与士兵相遇掉头等于不掉头的设定,我们可以得到第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\n");
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\n",minx,maxx);
return 0;
}
标签:最大 pac for space ret 就是 ace code main
原文地址:https://www.cnblogs.com/lixiao189/p/9300996.html