我发觉网络赛或者是现场赛和poj或者hdu上的很神似诶,比如stars in your window(这题还没做),再比如这题,简直就是一样嘛,和那个frog‘s game。
就是二分所有可能性,也没什么好说的。莫名奇妙就A了。。。
/*
Pro: 0
Sol:
date:
*/
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <queue>
#include <set>
#include <vector>
using namespace std;
int n,m,a[100100],low,high,mid;
bool go(int indx){
int pre = a[1]; int num = 1;
if(pre > indx) return false;
for(int i = 2; i <= n; i++){
if(pre + a[i] <= indx) pre += a[i];
else if(a[i] <= indx){//这里还判断了一下就A了。
pre = a[i],num ++;
}else return false;
if(num > m) return false;
}
return true;
}
int main(){
scanf("%d%d",&n,&m);
low = 1000000001;
for(int i = 1; i <= n; i ++) scanf("%d",a + i),high += a[i],low = min(low,a[i]);
// cout << low << " " << high << endl;
while(low <= high){
mid = (low + high) >> 1;
if(go(mid)) high = mid - 1;
else low = mid + 1;
}
printf("%d\n",low);
return 0;
}