페이지

3487번: Copying Books

https://www.acmicpc.net/problem/3487

#include<stdio.h>
#include<vector>
using namespace std;
const int MAX_N = 500;
typedef long long ll;
int t, n, k, a[MAX_N];
vector<int> r;
bool f(ll x) {
    vector<int> t;
    ll c = 1, s = 0;
    for (int i = n - 1; i >= 0; i--) {
        if (a[i]>x) return false;
        if (s + a[i]>x || i + 1 == k - c) s = a[i], c++, t.push_back(i);
        else s += a[i];
    }
    if (c == k) {
        r = t;
        return true;
    }
    return false;
}
int main() {
    scanf("%d", &t);
    while (t--) {
        scanf("%d %d", &n, &k);
        int i;
        for (i = 0; i<n; i++) scanf("%d", a + i);
        ll h = 0, t = 5e9, m;
        while (h <= t) {
            m = (h + t) / 2;
            if (f(m)) t = m - 1;
            else h = m + 1;
        }
        i = 0;
        for (int j = r.size() - 1; j >= 0; j--) {
            for (; i <= r[j]; i++) printf("%d ", a[i]);
            printf("/ ");
        }
        for (; i<n; i++) printf("%d ", a[i]);
        puts("");
    }
    return 0;
}

댓글 없음 :

댓글 쓰기