记录编号 385034 评测结果 AAAAAAAAAA
题目名称 划分数列 最终得分 100
用户昵称 GravatarTabing010102 是否通过 通过
代码语言 C++ 运行时间 0.063 s
提交时间 2017-03-19 21:02:34 内存使用 0.67 MiB
显示代码纯文本
#include <cstdio>
using namespace std;
const int maxn = 100000+10;
const int INF = 0x7fffffff;
FILE *fin, *fout;
int n, k, d[maxn], ans;
bool check(int now) {
	int num=0, cur=0;
	while(num<k && cur<n) {
		int ori = cur;
//		if(cur >= n) return true;
		while(d[cur+1]-d[ori]<=now && cur<n) cur++;
		if(d[cur]-d[cur-1] > now) return false;
		num++;
	}
	if(cur >= n) return true;
	else return false;
}
int main() {
	fin = fopen("seqa.in", "r");
	fout = fopen("seqa.out", "w");
//	fin = stdin; fout = stdout;
	fscanf(fin, "%d%d", &n, &k);
	for(int i = 1; i <= n; i++) {
		int tmp;
		fscanf(fin, "%d", &tmp);
		d[i] = d[i-1]+tmp;
	}
//	for(int i = 1; i <= n; i++) fprintf(fout, "%d ", d[i]); fprintf(fout, "\n");
	int l=0, r=INF, mid;
	while(l <= r) {
		mid = l+(r-l)/2;
		if(check(mid)) { ans = mid; r = mid-1; }
		else l = mid+1;
	}
	fprintf(fout, "%d\n", ans);
	return 0;
}