题目:烦恼的高考志愿 - 洛谷
题目大意
给定几个数和一个所考的分数进行比较,计算出最小不满度之和
坑点
要注意最小分数线与考出的最小分数进行比较
数据范围
long long int
思路
先进行sort排序,再用二分进行查找,还需用到绝对值,再输出结果
代码
#include<iostream>
#include<stdio.h>
#include<fstream>
#include<algorithm>
#include<cmath>
#include<deque>
#include<vector>
#include<queue>
#include<string>
#include<cstring>
#include<map>
#include<stack>
#include<set>
using namespace std;
const int N=1e6+10;//固定数据范围
long long int a[N];
long long int m,n;
int main()
{
cin>>m>>n;
for(int i=1;i<=m;i++)
{
cin>>a[i];//将每一个数分别输入
}
sort(a+1,a+1+m);//排序
long long int ans=0;
for(int i=1;i<=n;i++)
{
int x;//给定的数(例如3)
cin>>x;
int l=1,r=m;//左右端点
while(l<r)//判断
{
int mid=(l+r)/2;
if(a[mid]>=x)
{
r=mid;
}
else
{
l=mid+1;
}
}
if(x<a[1])
{
ans+=abs(x-a[1]);//取绝对值
}
else
{
ans+=min(abs(x-a[l]),abs(x-a[l-1]));//最小的值
}
}
cout<<ans<<endl;
return 0;
}
总结
多个知识点结合。&&&&