【二分】洛谷P1678_烦恼的高考志愿

Link

【二分】洛谷P1678_烦恼的高考志愿

思路

这题wa就是一个二分,(然而我WA了3次)
注意边界问题。。。就是要判断一下b是否小于a小的哪个,然后正常二分就冇问题啦 (自Arknights龙门陈Sir之口)

#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,a[100001],b,ans;
int main(){
	scanf("%d%d",&n,&m);   //输入
	for(int i=1;i<=n;++i)
	  scanf("%d",&a[i]);
	sort(a+1,a+1+n);     //快排,保证有序
	for(int i=1;i<=m;++i){     //读入m个考生
		scanf("%d",&b);
		if(b<=a[1]) ans+=a[1]-b;  //特判
		else{
			int l=1,r=n;   //正常二分
		    while(l<r){
			    int mid=(l+r)/2;
			    if(a[mid]>b) r=mid;
			    else if(a[mid]<=b) l=mid+1;
		    }
		    ans+=min(abs(a[l]-b),b-a[l-1]);  //加一下
		}	
	}
	printf("%d",ans);  //输出
}
上一篇:肖sir_多测师 _高级讲师 第二个月22讲解jenkins之实战安装(001)


下一篇:R软件SIR模型网络结构扩散过程模拟