Skip to content

11997: 【原1997】乔布斯的苹果

题目

题目描述

author: Changcheng Xiao 原OJ链接:https://acm.sjtu.edu.cn/OnlineJudge-old/problem/1997

问题描述

乔布斯去世前,在自己的庄园里种苹果,乔布斯的苹果每年收成都不错,所以都会卖掉一些。 大多数顾客对苹果的重量要求都比较模糊,但是今天乔布斯遇到一个非常挑剔的顾客,他只买 一个苹果,却只要最接近他要求大小的那个苹果,请你帮乔布斯写一个简单的程序筛选满足要 求的苹果。

输入格式

第1行: 2个整数,分别表示苹果的总数N和顾客要求的苹果重量W 第2行: N个整数,分别表示每个苹果的重量

输出格式

输出一个整数M,表示所有苹果中最符合顾客要求的那个苹果的重量(如果有多个苹果满足要求,取重量最大的)

样例输入

10 7
1 4 8 8 6 2 5 9 10 5

样例输出

8

限制条件

数据规模:\(0 < N < 1000, 0 < M < 1000\); 时间限制: 500ms; 内存限制: 30000kb.

yyong119's solution

#include <cstdio>
#include <algorithm>
#include <iostream>
#define MAX_N 1010
using namespace std;
int n, w;
int a[MAX_N];
inline int read() {
    char ch = getchar(); int res = 0, flag = 1;
    while (ch != '-' && (ch < '0' || ch > '9')) ch = getchar();
    if (ch == '-') flag = -1, ch = getchar();
    while (ch >= '0' && ch <= '9')
        res = (res << 3) + (res << 1) + (ch ^ 48), ch = getchar();
    return res * flag;
}
int main() {
    n = read(), w = read();
    for (register int i = 0; i < n; ++i) a[i] = read();
    sort(a, a + n);
    int k = lower_bound(a, a + n, w) - a;
    if (!k)
        printf("%d", a[0]);
    else
        // if (a[k] - w <= w - a[k - 1])
        if (a[k] + a[k - 1] <= (w << 1))
            printf("%d", a[k]);
        else
            printf("%d", a[k - 1]);
    return 0;
}