爆红,求助

P1678 烦恼的高考志愿

Miquella @ 2023-06-05 12:43:01

#include <bits/stdc++.h>
using namespace std;
int main()
{
    long long m,n;
    cin>>m>>n;
    long long arr1[100001];//m个学校预计录取分数线 
    long long arr2[100001];//n个学生的估分成绩
    long long ans = 0; //结果 
    for(int i = 1;i<=m;i++)cin>>arr1[i];
    for(int i = 1;i<=n;i++)cin>>arr2[i];
    //513 567 598 689
    //500 550 600
    //13+17+2 = 32
    sort(arr1+1,arr1+m+1);
    sort(arr2+1,arr2+n+1);
    for(int j = 1;j<=n;j++)
    {
        ans+=abs(arr1[j]-arr2[j]);

    }
    cout<<ans;
    return 0;
}

样例都是对的,难道是我思路太单纯了?


by _SqrtTree_ @ 2023-06-05 13:10:21

不一定一个学校只能有一个学生


by Mengshi @ 2023-06-05 13:31:26

你要知道对学生和学校分数线排完序后的数组并不是能一一对应上的

考虑以下数组:

1 20 30 40

1 2 3 4

你大概就能想明白了,确实思路太单纯了


by Martin07 @ 2024-04-14 14:39:37

#include<bits/stdc++.h>
using namespace std;
long long a[1000005],s[1000005],ans; 
int n,m;
int Binary(int x,int l,int r){
    while(l+1<r){
        int mid=l+(r-l)/2;
        if(a[mid]<=x)l=mid;
        else r=mid;
    }
    if(l==-1)return abs(a[r]-x);
    if(r==m)return abs(a[l]-x);
    return min(abs(x-a[l]),abs(x-a[r]));
}
int main(){
    cin>>m>>n;
    for(int i=0;i<m;i++)cin>>a[i];
    for(int i=0;i<n;i++)cin>>s[i];
    sort(a,a+m);
    for(int i=0;i<n;i++){
        ans+=Binary(s[i],-1,m);
    }
    cout<<ans;
    return 0;
}

zhegeOK这个OK


|