跳伞兵 (链接–洛谷)
题目背景
在一次实战演练中,敌方已经入了目标领土,所以司令派跳伞兵落到作战区域,但要快速集合是很困难的,因此,司令找到了你来帮忙
题目描述
跳伞兵 题目 在一次实战中,司令要求跳伞兵们要跳n*n的阵地中,士兵们的跳伞顺序按他们的编号(编号是自己来定的),每人的下降速度都是5m/s(样例都是整数),但要每个跳伞兵隔开2秒才能跳。 但n×n的战地都是平原,他们的任务是在任意一个地方,用最快的时间集合在一起(一个点上)
注意:只要一落地就可以去集合点了(是不是很神奇 )
但是跳伞兵兵是专业训练过的,他们在4个方向都可以移动,但移动的速度是1.
所以司令让你编出一个程序,让他们尽快集合,不然小日本军就要杀过来了
输入输出格式
输入格式:
第一行两个数n和k;n表示n×n的阵地,k表示多少个跳伞兵
第三行一个数,表示飞机上的跳伞兵距离地面的距离m(数据保证是5的倍数)
接下来k行,每行两个数q,p,表示跳伞兵的坐标:第几行,第几列
输出格式:
输出最短的时间(包括跳伞时间)
输入样例#1:
5 5
85
2 1
5 2
4 3
3 2
1 5
输出样例#1:
25
说明
对于30% 的数据,有 n ≤15 k≤100 m≤30;
对于50% 的数据,有 n ≤30 k≤500 m≤50;
对于80% 的数据,有 n ≤40 k≤1000 m≤80;
对于100% 的数据,有 n ≤60 k≤3500 m≤100;
解题思路
其实这道题就是一道模拟,就是模拟每个点到每个跳伞兵的距离的最优点再排序选出最大的就最快跳,在计算出其他的时间即可.
- 要思考
- 要思考
- 要思考
- 要思考
- 要思考
- 要思考
- 一定要思考
- 一定要思考
- 一定要思考
- 一定要思考
- 一定要思考
- 一定要思考
- 一定要思考
- 一定要思考
- 一定要思考
- 一定要思考
- 一定要思考
- 一定要思考
- 一定要思考
- 一定要思考
- 一定要思考
- 一定要思考
- 一定要思考
- 一定要思考
- 一定要思考
- 一定要思考
- 以上是来自本蒟蒻的诉求
程序如下
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#define abs(a) (a)<0?-(a):(a)
using namespace std;
int n,k,m,x[4000],y[4000],ans,sum,a[4000];
bool cmp(int aa,int bb){return aa>bb;}
int jr(int q,int p)
{
sum=0;
for(int i=1;i<=k;++i)
{
a[i]=(abs(x[i]-q))+(abs(y[i]-p));//求出每个跳伞兵到每个点最短距离
}
sort(a+1,a+1+k,cmp);//排序,求出最后的跳伞兵
for(int i=1;i<=k;++i)
{
sum=max(sum,a[i]+m/5+(i-1)*2);//其他的时间
}
return sum;
}
int main()
{
scanf("%d%d",&n,&k);
scanf("%d",&m);
for(int i=1;i<=k;++i)
{
scanf("%d%d",&x[i],&y[i]);
}
ans=2147483647;
for(int i=1;i<=n;++i)
{
for(int j=1;j<=n;++j)
{
ans=min(ans,jr(i,j));//最优方案
}
}
printf("%d",ans);
return 0;
}