WA60fen

4. 年夜饭

题目ID:8591必做题100分

最新提交:

Wrong Answer

60 分

历史最高:

Wrong Answer

60 分

时间限制: 1000ms

空间限制: 524288kB

题目描述

马上又要过年了,大哈准备做一桌年夜饭,但因为他实在太“勤快”,所以今年的年夜饭他准备全都点外卖。他在做出这个决定的时候已经是下午了,所以时间非常地赶。他在不同的n个餐厅都下了单,每个餐厅点了1个菜,每个菜可以选择让餐厅送,也可以选择自提。他想知道最少需要多久就可以把所有的菜都送到家。

输入格式

第一行一个整数n
第二行n个整数a[i]代表第i家餐厅送餐要花费的时间
第三行n个整数b[i],代表去第i家餐厅自提要花费的时间

输出格式

输出一个整数,代表把所有菜都送到家的最少需要花多久

#include<bits/stdc++.h>
using namespace std;
long long a[200005];
long long b[200005];
int n;
bool check(long long mid){
	int sum=0;
	for(int i=1;i<=n;i++){
		if(a[i]>=mid){
			sum+=b[i];
		}
	}
	return sum<mid;
}
int main(){
	cin>>n;
	long long l=1,r=LONG_MAX;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}

	for(int i=1;i<=n;i++){
		cin>>b[i];
	}
	while(l<r){
		long long mid=(l+r)/2;
		if(check(mid)){
			r=mid-1;
		} else{
			l=mid;
		} 
	}
	cout<<l;
}
2 个赞

主要错误有一下几点(我也是最近刚学二分答案的):
1.check函数中sum的类型应该为long long,根据数据范围易知;
2.check函数中当a[i]>mid是sum+=b[i]; 返回值为return sum<=mid;
3.r变量建议定义为1000000000
4.二分模版出现错误,当满足条件时r=mid否则l=mid+1;
改一下就能AC了 :grinning: :grinning: :grinning: :grinning:

1 个赞

A了谢谢

1 个赞