求 hack
查看原帖
求 hack
574944
Micnation_AFO楼主2022/7/27 19:55

30 / 40 pts 代码:

#include <iostream>
#include <algorithm>

using namespace std;

const int N = 1e2 + 10;
const int INF = 1e9 + 10;

int n, sum = INF;
int a[N];

int check(int x) {
    int ans = 0;
    int val = a[1];
    for (int i = 2; i <= x; i++)
        if (a[i] <= val) val = min(val, a[i]), ans++;
        else val = a[i];
    val = a[n];
    for (int i = n - 1; i >= x; i--) 
        if (a[i] <= val) val = max(val, a[i]), ans++;//这里改为 a[i] >= val 的话 40 pts
        else val = a[i];
    return ans;
}

int main() {
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i];
    int val;
    for (int i = 1; i <= n; i++) 
        if (check(i) < sum) sum = check(i), val = i;
    cout << sum /* << " " << val*/<< endl;
    return 0;
}

主要思路就是枚举每一个点作为最高点,然后在左边和右边分别扫描计算需要删除的人数,然后取最小值。

2022/7/27 19:55
加载中...