40求调SOS 对比题解来看实在不知道错哪里了
查看原帖
40求调SOS 对比题解来看实在不知道错哪里了
1473025
maggieee527楼主2024/11/28 17:54
#include <bits/stdc++.h>
using namespace std;

long long N, M;
long long a[10001];

void f(long long p, long long q)
{
    if (p == q)
    {
        cout << p;
        return;
    }
    long long t = (p + q) / 2;
    long long w = 0;
    long long k1 = 0;
    for (int i = 0; i < N; i++)
    {
        k1 += a[i];
        if (k1 < t)
            continue;
        else if (k1 > t)
        {
            w++;
            k1 = a[i];
            if (i == N - 1)
                w++;
        }
        
    }
    if (w <= M)
    {
        if (p == q - 1)
        {
            cout << p;
            return;
        }
        f(p, t);
    }
    else
    {
        if (p == q - 1)
        {
            cout << q;
            return;
        }
        f(t, q);
    }
}

int main()
{
    cin >> N >> M;
    long long sum = 0;
    for (int i = 0; i < N; i++)
    {
        cin >> a[i];
        sum += a[i];
    }
    int t = max_element(a, a + N) - a;

    f(a[t], sum);
}

跪谢

2024/11/28 17:54
加载中...