灌水——求助P1678烦恼的高考志愿
  • 板块灌水区
  • 楼主yljx
  • 当前回复8
  • 已保存回复8
  • 发布时间2022/7/11 21:45
  • 上次更新2023/10/27 21:00:22
查看原帖
灌水——求助P1678烦恼的高考志愿
381510
yljx楼主2022/7/11 21:45

我的想法是用二分

//洛谷 https://www.luogu.com.cn/problem/P1678
#include<bits/stdc++.h>
using namespace std;

const int N=100010;
int a[N],b[N],ans;

int main(){
//	freopen("in.cpp","r",stdin);
	int n,m;
	cin>>m>>n;
	
	for(int i=1;i<=m;i++){
		cin>>a[i];//输入学校分数线
	}
	for(int i=1;i<=n;i++){
		cin>>b[i];//输入学生估分
	}
	sort(a+1,a+n+1);
	for(int i=1;i<=n;i++){
		int l=1,r=n+1;
		while(l<r){//寻找第一个超过估分的学校,那它或它前面的一个学校就是目标学校
			int mid=(l+r)/2;
			if(a[mid]>=b[i])r=mid;
			else l=mid+1;//向左找
		}
		
		if(b[i]<=a[1])ans+=a[1]-b[i];
		else ans+=min(abs(a[l]-b[i]),abs(a[l-1]-b[i]));
	}
	cout<<ans;
	return 0;
}

可是……只过了一个点,不是很能理解…… 大佬们帮帮忙,蟹蟹!

2022/7/11 21:45
加载中...