能帮就帮吧,谢谢

P1678 烦恼的高考志愿

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;
}

这样就好了


|