社区讨论

35pts 求调

P4343[SHOI2015] 自动刷题机参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mhjcryzr
此快照首次捕获于
2025/11/04 00:27
4 个月前
此快照最后确认于
2025/11/04 00:27
4 个月前
查看原帖
CPP
#include<iostream>
using namespace std;
typedef long long ll;
ll L, k, ans1 = -1, ans2 = -1;
ll a[100005];
ll check(ll x) {
    ll cnt = 0;
    ll len = 0;
    for (int i = 0; i < L; i++) {
        if (len < 0) len = 0;
        len += a[i];
        if (len >= x) {
            cnt++;
            len = 0;
        }
    }
    if (len >= x) cnt++;
    return cnt;
}
int main() {
    cin >> L >> k;
    for (int i = 0; i < L; i++) cin >> a[i];
    ll l = 1, r = 1e14;
    while (l < r) { // 最小
        ll mid = (l + r + 1) / 2;
        if (check(mid) > k) {
            l = mid + 1;
        } else {
            ans1 = mid;
            r = mid;
        }
    }
    l = 1, r = 1e14;
    while (l < r) { // 最大
        ll mid = (l + r + 1) / 2;
        if (check(mid) < k) {
            r = mid - 1;
        } else {
            ans2 = mid;
            l = mid;
        }
    }
    if (ans1 == -1 || ans2 == -1) {
        cout << -1;
        return 0;
    }
    cout << ans1 << " " << ans2;
    return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...