1 #include<stdio.h>
2
3 int a[10000];
4 int n,m;
5
6 int is_part(int u)
7 {
8 int sum,i,count,ok;
9 sum=count=0;ok=1;
10 for(i=0;i<n;i++)
11 {
12 if(a[i]>u)
13 {
14 ok=0;
15 break;
16 }
17 if(sum+a[i]>u)
18 {
19 sum=a[i],
20 count++;
21 if(count==m)
22 {
23 ok=0;
24 break;
25 }
26 }
27 else sum+=a[i];
28 }
29 return ok;
30 }
31
32
33 int fun(int x,int y)
34 {
35 int m;
36 while(x<y)
37 {
38 m=x+(y-x)/2;
39 if(is_part(m)) y=m;
40 else x=m+1;
41 }
42 return x;
43 }
44
45 int main()
46 {
47 int i,j,max,sum;
48 while(scanf("%d%d",&n,&m)!=EOF)
49 {
50 max=sum=0;
51 for(i=0;i<n;i++)
52 {
53 scanf("%d",&a[i]);
54 max=max>a[i]?max:a[i];
55 sum+=a[i];
56 }
57 j=fun(max,sum);
58 printf("%d\n",j);
59 sum=0;
60 for(i=0;i<n;i++)
61 {
62 sum+=a[i];
63 if(sum>j)
64 {
65 sum=a[i];
66 printf("| ");
67 }
68 printf("%d ",a[i]);
69 }
70 printf("\n");
71 }
72 return 0;
73 }
74
75 /*
76 6 3
77 1 2 3 2 5 4
78
79
80 7
81 1 2 3 | 2 5 | 4
82 */
1 #include<stdio.h>
2
3 int a[10000];
4 int n,m;
5
6 int is_part(int u)
7 {
8 int sum,i,count,ok;
9 sum=count=0;ok=1;
10 for(i=0;i<n;i++)
11 {
12 if(a[i]>u)
13 {
14 ok=0;
15 break;
16 }
17 if(sum+a[i]>u)
18 {
19 sum=a[i],
20 count++;
21 if(count==m)
22 {
23 ok=0;
24 break;
25 }
26 }
27 else sum+=a[i];
28 }
29 return ok;
30 }
31
32
33 int fun(int x,int y)
34 {
35 int m;
36 while(x<y)
37 {
38 m=x+(y-x)/2;
39 if(is_part(m)) y=m;
40 else x=m+1;
41 }
42 return x;
43 }
44
45 int main()
46 {
47 int i,j,max,sum;
48 while(scanf("%d%d",&n,&m)!=EOF)
49 {
50 max=sum=0;
51 for(i=0;i<n;i++)
52 {
53 scanf("%d",&a[i]);
54 max=max>a[i]?max:a[i];
55 sum+=a[i];
56 }
57 j=fun(max,sum);
58 printf("%d\n",j);
59 sum=0;
60 for(i=0;i<n;i++)
61 {
62 sum+=a[i];
63 if(sum>j)
64 {
65 sum=a[i];
66 printf("| ");
67 }
68 printf("%d ",a[i]);
69 }
70 printf("\n");
71 }
72 return 0;
73 }
74
75 /*
76 6 3
77 1 2 3 2 5 4
78
79
80 7
81 1 2 3 | 2 5 | 4
82 */