传送门
来源:牛客网
题目描述
在云塘校区,有一个很适合晒太阳的地方————年轮广场
年轮广场可以看成n个位置顺时针围成一个环。
这天,天气非常好,Mathon带着他的小伙伴们出来晒太阳。他们分别坐在A[i]位置上,每个位置上保证最多只有1个小伙伴。现在Mathon想让大家集合玩狼人杀,所以想选择一个位置集合,之后所有的人顺时针或逆时针移动到那里去,每移动两个相邻的位置需要1个单位时间,小伙伴们都很有素质所以不会插近路踩草坪,只会沿着位置走。
Mathon想越快集合越好,于是他在群里发了QQ消息告诉大家集合位置,假设所有人都立刻接到了消息,然后都以最优的方法往集合位置移动。
要把所有人集合到一个位置最少需要多少时间?
输入描述:
多组输入
每组数据第一行输入n,m(1<=n,m<=1000),n表示年轮广场上位置的个数,m表示Mathon以及他的小伙伴总人数
第二行m个数,第i个Ai表示第i个人的位置。
输出描述:
每组数据输出一行,表示所需要的最少时间。
示例1
输入
5 3
1 4 5
3 2
1 3
输出
1
1
说明
第一组数据选择5为集合地点,第二组数据选择2为集合地点。
#include<bits/stdc++.h>
using namespace std;
int p[1005];
int main()
{
int n,m;
while(cin>>n>>m){
memset(p,0,sizeof(p));
int ans=1e9;
for(int i=1;i<=m;i++) cin>>p[i];
for(int i=1;i<=n;i++){
int f=0;
for(int j=1;j<=m;j++){
if(p[j]<i){//当前位置在此人的左边
f=max(f,min(i-p[j],p[j]+n-i));
}
else{
f=max(f,min(p[j]-i,n-p[j]+i));
}
}
ans=min(ans,f);
}
cout<<ans<<endl;;
}
return 0;
}
总结:
暴力法遍历每一个点,计算当前点与有人的点之间的最短距离,再在其中取最大值,最后在所有遍历的结果中取最小值