UVa 714 Copying Books——二分最大值最小化

网友投稿 507 2022-11-29

UVa 714 Copying Books——二分最大值最小化

UVa 714 Copying Books——二分最大值最小化

注意上界在累加时可能超过int范围

#include #include #include #include using namespace std;int m, k;long long a[1000];bool judge(long long x) { long long sum = 0, cnt = 1; for (int i = m; i >= 1; i--) { sum += a[i]; if (sum > x) { sum = a[i]; cnt++; if (cnt > k) return false; } } return true;}void output(int ans) { int gang[1000]; memset(gang, 0, sizeof(gang)); long long sum = 0, cnt = 1; for (int i = m; i >= 1; i--) { sum += a[i]; if (sum > ans) { sum = a[i]; cnt++; gang[i] = 1; } if (k - cnt == i) { for (; i >= 1; i--) { gang[i] = 1; } break; } } int flag = 0; for (int i = 1; i <= m; i++) { if (flag++) printf(" "); printf("%d", a[i]); if (gang[i]) printf(" /"); } printf("\n");}int main(){ int T; scanf("%d", &T); while (scanf("%d %d", &m, &k) == 2) { long long L = 0, R = 0; for (int i = 1; i <= m; i++) { scanf("%lld", &a[i]); R += a[i]; if (a[i] > L) L = a[i]; } while (L <= R) { long long x = L + (R - L) / 2; if (judge(x)) R = x - 1; else L = x + 1; } output(L); } return 0;}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:UVa 11134 Fabled Rooks ——区间选点
下一篇:UVa 1451 Average——斜率优化
相关文章

 发表评论

暂时没有评论,来抢沙发吧~