POJ 3273:Monthly_Expense
源代码
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#define MAX_N 100000
#define INF 0x3f3f3f3f
#define MAX(x,y) x<y?y:x
int money[MAX_N];
int M, N;
int binary_search(int, int);
bool isOK(const int money_month);
int main() {
int max_day = 0;
scanf("%d %d", &N, &M);
for (int i = 0; i < N; i++)
{
scanf("%d", money + i);
max_day = MAX(max_day, money[i]);
}
printf("%d\n", binary_search(max_day - 1, INF));
return 0;
}
int binary_search(int begin, int end) {
int mid = 0;
while (end - begin > 1)
{
mid = ((end - begin) >> 1) + begin;
//printf("开始值 %d\n",begin);
//printf("中间值 %d\n",mid);
//printf("结束值 %d\n\n",end);
if (isOK(mid))
end = mid;
else
begin = mid;
}
return end;
}
bool isOK(const int money_month) {
int money = 0;
int times = 1;
for (int i = 0; i < N; i++)
{
if ((money += ::money[i]) > money_month)//这里需要个括号 C++运算符优先级 + 高于 > 高于 +=
{
money = ::money[i];
times++;
}
}
return times <= M;
}
不晓得为啥子 + 与 += 运算符优先级不一样而且中间插了一堆其他运算符