P a r t Part Part 1 1 1 读题
在一条坐标轴上,你在 x = 1 x=1 x=1处,朋友在 x = 1 0 6 x=10^6 x=106处,你们两中间有 n n n个礼物,第 i i i个礼物坐标为 a i a_i ai( 1 < a i < 1 0 6 1<a_i<10^6 1<ai<106)
现在你们同时出发,且每秒可以移动一个单位。
一旦经过某个礼物,你或你的朋友就会捡起它,请问把所有礼物捡起最少要多少秒。
输入格式
共两行。
第一行:一个正整数 n n n表示礼物的个数。
第二行: n n n个整数表示 n n n个礼物的位置。
输出格式
一个整数,表示最少需要多少秒。
输入样例1
3
2 3 9
输出样例1
8
输入样例2
2
2 999995
输出样例2
5
数据范围与提示
对于 30 % 30\% 30%的数据, 1 ≤ n ≤ 1 0 3 1≤n≤10^3 1≤n≤103
对于 100 % 100\% 100%的数据, 1 ≤ n ≤ 1 0 5 1≤n≤10^5 1≤n≤105, 1 < a i < 1 0 6 1<a_i<10^6 1<ai<106
P a r t Part Part 2 2 2 思路
本题非常简单,题目已经告了速度都为 1 1 1,所以直接算距离就行了。
但是注意有个坑,计算我到礼物的距离需要 − 1 -1 −1
举个简单的例子:
到 a i = 10 a_i=10 ai=10的地方,显然是我近。那么我需要走 9 9 9秒,并非 10 10 10秒,所以需要在距离的基础上 − 1 -1 −1
而到 a i = 999990 a_i=999990 ai=999990的地方,显然是朋友近。那么朋友需要走 10 10 10秒,距离不变,所以我们不需要进行变化,直接用 1000000 1000000 1000000减去距离就可以啦!
算距离的代码如下:
//b代表距离
if(a<=500000)b=a-1;
else b=1000000-a;
然后我们取最大值就可以啦!(就是最长时间)
小tip:大家可以先根据思路,写一下代码哦!
P a r t Part Part 3 3 3 代码
#include<bits/stdc++.h>
using namespace std;
int t,a,b,mx=-1;
int main(){
cin>>t;
for(int i=1;i<=t;i++){
cin>>a;
//算距离,判断离我近还是离朋友近,b代表距离
if(a<=500000)b=a-1;
else b=1000000-a;
if(b>mx)mx=b;//最大值
}
cout<<mx;
return 0;
}
听完后,是不是觉得很简单呢?赶快自己去试一下吧!!!