题解:CF253B Physics Practical

· · 题解

题目传送门

一眼二分,根据思考得出:我们只需要二分找到大于 2x 的最小的数,又因为有序性,中间的区间就是符合要求的,其他的就要删去,这样我们就只需枚举 x

AC Code

#include <bits/stdc++.h>
using namespace std;
int n, a[100005];
int ans = 0x7fffffff;
int main() {
    cin>>n;
    for (int i = 1; i <= n; i++) cin>>a[i];
    sort(a + 1, a + n + 1);
    for (int i = 1; i <= n; i++) {
        int* s = upper_bound(a + 1, a + n + 1, a[i] * 2);
        ans = min(ans, (int)(a + i - s + n));
    }
    cout<<ans;
    return 0;
}