POJ3273 MonthlyExpense 【裸二分但易错】

详见blog.csdn.net/lyy289065406/article/details/6648554,也就一简单的很裸的二分。。。

以前看到一句话,90%的程序员会写错二分程序,果不其然,虽然前面二分都写对了,但这个确实卡了一下,还好去洗个澡回来就想出来了,哇哈哈哈

这个要注意,在L<R-1的时候就应该终止二分循环,然后手动选择答案(也就是说有时候二分最后一步需要自己手动选择答案)

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
const int MAXN=155555;
int n,m;
int day[MAXN];
bool judge(int money)
{
	int sum=0;
	int group=0;
	for(int i=1;i<=n;i++)
	{
		sum+=day[i];
		if(sum>money)
		{
			sum=day[i];
			group++;
		}
	}
	group++;
	return group>m;
}
int main()
{
	#ifndef ONLINE_JUDGE
    	//freopen("/home/test/in.txt","r",stdin);
    	//freopen("/home/test/list.txt","w",stdout);
    #endif
    while(scanf("%d%d",&n,&m)!=EOF)
    {
    	memset(day,0,sizeof(day));
		int sum=0;
		int daymax=0;
		for(int i=1;i<=n;i++)
		{
			scanf("%d",&day[i]);
			sum+=day[i];
			daymax=max(day[i],daymax);
		}
		int L=daymax;
		int R=sum;
		int mid=(L+R)>>1;
		//cout<<sum<<endl;
		while(L<R-1)
		{
			if(judge(mid))
			{
				L=mid+1;
			}
			else
			{
				R=mid;
			}
			mid=(L+R)>>1;
		}
		if(judge(mid))
			mid++;
		printf("%d\n",mid);
	}
    return 0;
}

POJ3273 MonthlyExpense 【裸二分但易错】,布布扣,bubuko.com

时间: 2024-10-24 10:24:08

POJ3273 MonthlyExpense 【裸二分但易错】的相关文章

Javascript易错知识点

? JS易错知识点总结: == 和 === 的区别: ==:判断两个变量的值是否相等. ===:判断两个变量的类型和值是否都相等,两个条件同时满足时,表达式为True. switch中break的作用: 如果一个case后面的语句,没有写break,那么程序会向下执行,而不会退出: 例如:当满足条件的case 2下面没有break时,case 3也会执行 1 var num = 2; 2 switch(num){ 3 case 1: 4 alert('case 1'); 5 break; 6 c

黑马程序员---C基础3【变量的易错】【程序结构】【if语句】【Switch语句】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- [变量的易错] 1.变量为什么要初始化为0 int  sum,a=3: sum = sum+a 如果未初始化则会成为一个不确定的变量,结果也会不确定,容易出错. 2.不同类型的变量之间的转换 切记int  a=1,b=0:b=1-1.5:其中b为一个整型所有结果是保留整数部分的0,而不是-0.5,又因为0没有正负之分,所有保存结果为b=0: 3.关于Xcode的一个快速注释的插件 快捷键://

细节!重点!易错点!--面试java基础篇(一)

今天来给大家分享一下java的重点易错点部分,也是各位同学面试需要准备的,欢迎大家交流指正. 1.java中的main方法是静态方法,即方法中的代码是存储在静态存储区的. 2.任何静态代码块都会在main方法之前执行. 3.java程序的初始化顺序:原则:静态优先于非静态,且只初始化一次:父类优先于子类:按照成员定义顺序初始化.例顺序:父类静态变量,父类静态代码块,子类静态变量,子类静态代码块,父类非静态变量,父类非静态代码块,父类构造函数,子类非静态变量,子类非静态代码块,子类构造函数. 4.

JavaScript易错知识点整理

本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由浅入深的介绍和讲解,其中也涉及了一些ES6的知识点. JavaScript知识点 1.变量作用域 var a = 1; function test() { var a = 2; console.log(a); // 2 } test(); 上方的函数作用域中声明并赋值了a,且在console之上,所以遵循就近原则输出a等于2. var a

GLES &amp; Shader Language 易错集锦

1. vertex shader 和 fragment shader 通过varying变量传递数据,  如下代码在编译fragment shader时候会提示编译错误 vertex shader Fragment shader varying vec4 v_color; \n attribute vec3 v_Position; \n attribute vec4 f_Color; \n void main(void) \n { \n gl_Position = vec4(v_Position

PHP数据访问易错点(20161030)

易错点: 1.造对象的时候括号里面的参数 写错了 $db = new MySQLi("localhost","root","789","1016"); 2.牵扯到传值的,前面的名字和后面的名字不匹配 <form action="1028afternoonaddchuli.php"  method="post"> <div>代号:<input type=&qu

页面制作(PS/HTML/CSS)易错点总结

今天做了网易云课堂的页面制作试卷,虽然分数暂未公布,但是已经知道了自己这段时间以来的成效.下面总结几个易错点: 1.Photoshop切图: 图片保存格式: a.图片色彩较为丰富但无透明度要求时应保存为jpg格式: b.当图片色彩不太丰富时无论有无透明要求时保存为png8,且设置“杂边:无:扩散:无仿色”: c.当图片有半透明要求,不对图片进行压缩,保存为24. 注意:PNG8格式图片的颜色模式是索引颜色,在修改前要先更改颜色模式为RGB颜色. 常用快捷键: a.Alt+shift+Ctrl+s

易错的快排---qsort()

来看看快速排序的几个易错点: void qsort(int l,int r) { long long mid=a[(l+r)>>1]; //*1 千万不可以写成: mid=(l+r)>>1 然后:while(a[i]<a[mid]) i++; //因为数组的顺序在变化,当i越过mid的时候,会因为a[i]==a[mid]而退出 //那样你锁定的就不是中间值,而是中间位置了 int i=l,j=r; do { while(a[i]<mid) i++; while(a[j]

c语言:易错的if语句

易错的if语句 #include <stdio.h> int main() { int a=20; if (1 <= a <= 10)//1<=20为真,结果为1,1<=10为真 { printf("in range\n"); } else { printf("out of range\n"); } return 0; } 结果: in range 请按任意键继续. . .