gyttnnd @ 2022-11-08 20:20:49
#include<bits/stdc++.h>
using namespace std;
int a[100000],b[100000];
int f(int a,int b,int c)
{
int x=a-c;
int y=c-b;
if(x>=y)
return y;
else
return x;
}
int main()
{
int m,n;
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+m+1);
sort(b+1,b+n+1);
int p=1;
int sum=0;
for(int i=1;i<=n;i++)
{
for(int j=p;j<=m;j++)
{
if(b[i]<a[j])
{
sum=sum+f(a[j],a[j-1],b[i]);
break;
}
else
p=j;
}
}
cout<<sum;
return 0;
}
by mxym @ 2022-11-08 20:39:28
没有考虑学生成绩大于所有学校分数线的情况
by mxym @ 2022-11-08 20:50:41
@gyttnnd
#include<bits/stdc++.h>
using namespace std;
int a[100010],b[100010];
int f(int a,int b,int c)
{
int x=abs(a-c);
int y=abs(b-c);
return min(x,y);
}
int main()
{
int m,n;
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+m+1);
sort(b+1,b+n+1);
int p=1;
long long sum=0;
a[0]=1.0/0.0;
a[0]--;
for(int i=1;i<=n;i++)
{
for(int j=p;j<=m;j++)
{
if(b[i]>=a[m])
{
sum+=b[i]-a[m];
break;
}
if(b[i]<=a[j])
{
sum+=f(a[j],a[j-1],b[i]);
p=j;
break;
}
}
}
cout<<sum;
return 0;
}
这样就好了