【C++题解】[广州大学附属中学-38]礼物

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 1ai106

现在你们同时出发,且每秒可以移动一个单位。

一旦经过某个礼物,你或你的朋友就会捡起它,请问把所有礼物捡起最少要多少秒。

输入格式

共两行。

第一行:一个正整数 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 1n103

对于 100 % 100\% 100%的数据, 1 ≤ n ≤ 1 0 5 1≤n≤10^5 1n105 1 < a i < 1 0 6 1<a_i<10^6 1ai106

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;
}

听完后,是不是觉得很简单呢?赶快自己去试一下吧!!!

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值