UVA11850 Alaska 题解

本文讨论了一个关于电动汽车充电问题的编程题目,通过输入充电站的位置,判断车辆在有限的续航里程下能否完成全程。关键步骤包括排序、距离判断和处理特殊情况。
摘要由CSDN通过智能技术生成

其实这题非常简单。

首先,我们可以明确,遇到充电站后,电量一定是会变成 200 200 200 的,也就是可以继续行驶 200 200 200 单位距离。那么如果行驶了 200 200 200 单位距离后还没有充电站,那么就不可能。

注意一个特殊情况:因为是往返,所以离开最后一个充电站后先到达公路终点,再从公路终点到达最后一个充电站,也就是要走两次,所以这个要特判,如果最后一个充电站离终点超过了 100 100 100 个单位距离,就无法完成。

总结一下:

  • 第一步:输入之后从小到大排序。

  • 第二步:枚举每个充电站与前面一个的距离,如果超过了 200 200 200 则将变量 flag 设置为 false

  • 第三步,判断最后一个充电站如果最后一个充电站离终点超过了 100 100 100 个单位距离则将变量 flag 设置为 false

  • 第四步,按照 flag 输出,如果 flagfalse 输出 IMPOSSIBLE,反之输出 POSSIBLE

  • 注意:flag 变量初值为 true

由于题目没有给出 n n n 的取值范围,我们猜测输入中没有重复的充电站位置,所以 n n n 最大应该为 1422 1422 1422,为了保险,我这里开了 1505 1505 1505

分析完了思路,我们就可以完成代码了:

#include <iostream>
#include <algorithm>
using namespace std;
int a[1505];
int main() {
    int n;
    while(true) {
        cin >> n;
        if(n == 0) break;
        for(int i = 1;i <= n;i++) cin >> a[i];
        sort(a+1,a+n+1);
        bool flag = true;
        for(int i = 2;i <= n-1;i++) {
            if(abs(a[i] - a[i-1]) > 200) {
                flag = false;
                break;
            }
        }
        if(abs(1422 - a[n]) > 100) flag = false;
        if(!flag) cout <<"IMPOSSIBLE" << endl;
        else cout << "POSSIBLE" << endl;
    }
    return 0;
}
  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值