记录编号 202599 评测结果 AAAAAAAAAA
题目名称 书的复制 最终得分 100
用户昵称 Gravatarqzyz_czs 是否通过 通过
代码语言 C++ 运行时间 0.003 s
提交时间 2015-11-01 16:01:45 内存使用 0.32 MiB
显示代码纯文本
#include <fstream>
#include <algorithm>


using namespace std;


const int MaxN = 1000 + 10;


int a[MaxN], n, k, ans[MaxN];


void binary(int , int );
bool check(int );


int main(void)
{
	ifstream cin("books.in");
	cin >> n >> k;
	int lowerlimit = 0, upperlimit = 0;
	for (int i = 1; i <= n; ++i)
	{
		cin >> a[i];
		lowerlimit = max(lowerlimit, a[i]);
		upperlimit += a[i];
	}
	cin.close();
	
	binary(lowerlimit, upperlimit + 1);
	ans[0] = 1;
	ans[k] = n + 1;
	
	ofstream cout("books.out");
	for (int i = 1; i <= k; ++i)
		cout << ans[i - 1] << ' ' << ans[i] - 1 << endl;
	cout.close();
	
	return 0;
}


void binary(int l, int r)
{
	if (l == r - 1)
	{
		check(l);
		return ;
	}
	int mid = (l + r) / 2;
	if (check(mid - 1))
		binary(l, mid);
	else
		binary(mid, r);
}


bool check(int val)
{
	for (int i = 1, sum = 0, tot = 0; i <= n; ++i)
		if ((sum += a[i]) > val)
		{
			ans[++tot] = i;
			if (tot >= k)
				return 0;
			sum = a[i];
		}
	return 1;
}