asd

홍순엽·2021년 1월 1일
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include<cstdio>
int N, M, marble[302];
int answer[301], ansSize = 1;
int main(void) {
    scanf("%d %d"&N, &M);
    for (int i = 0; i < N; i++scanf("%d"&marble[i]);
    int left = 1, right = (100 * N);
    int ans = 999;
    while (left <= right) {
        int mid = (left + right) / 2;
        int sum = 0, countGroup = 1;
        bool boolean = 1;
        for (int i = 0; i < N; i++) {
            if (marble[i] > mid) {
                left = mid + 1;
                boolean = 0;
                break;
            }
            sum += marble[i];
            if (sum > mid) {
                countGroup++;
                sum = marble[i];
            }
        }
        if (countGroup > M || boolean == 0) (left = mid + 1);
        else {
            right = (mid - 1);
            if (mid < ans) ans = mid;
        }
    }
    printf("%d\n", ans);
    int num = 0, sum = 0;
    for (int i = 0; i < N; i++) {
        sum += marble[i];
        num++;
        if (sum > ans) {
            sum = marble[i];
            answer[ansSize] = num - 1;
            ansSize++;
            num = 1;
        }
    }
    answer[ansSize] = num;
    int difference = (M - ansSize);
    for (int i = 1; i <= ansSize; i++) {
        if (answer[i] == 1printf("%d ", answer[i]);
        else {
            while (answer[i] >= 2 && difference >= 1) {
                printf("1 ");
                answer[i]--; difference--;
            }
            printf("%d ", answer[i]);
        }
    }
}
 
cs
profile
ㅎㅅㅇ

0개의 댓글