满江红爆0玄关

P1678 烦恼的高考志愿

xukeyu @ 2024-08-08 19:22:02


#include<bits/stdc++.h>
using namespace std;
int n,a[1000001],m,b,sum,l,r;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    sort(a+1,a+1+n);
    r=n+1;
    cin>>m;
    for(int i=1;i<=m;i++){
        cin>>b;
        while(l<r){
            int mid=(l+r)>>1;
            if(a[mid]>=b) r=mid;
            if(a[mid]<b) l=mid+1;
        } 
        if(a[l]-b<=b-a[l-1]) sum+=a[l]-b;
        else sum+=b-a[l-1];
    }
    cout<<sum;
    return 0;
}

by xukeyu @ 2024-08-08 19:31:13

令人一头雾水


by liaocr @ 2024-08-08 19:43:46

@xukeyu 调出来了

if(a[l]-b<=b-a[l-1]) sum+=a[l]-b;
        else sum+=b-a[l-1];

这里都套上abs 得70 然后加一个判断


if(b<=a[1])
{
  ans+=a[1]-b;
  continue;
}

这样就100分了


by liaocr @ 2024-08-08 19:45:08

@xukeyu 但这里Subtask #1的会WA不知道为啥 但还是100分

https://www.luogu.com.cn/record/171450927


by xukeyu @ 2024-08-08 19:49:34

@liaocr 谢谢大佬膜拜(加一个关注)


by liaocr @ 2024-08-08 19:51:46

@xukeyu 知道了 sum开long long 就完全AC了


by jzm_2024 @ 2024-08-11 14:13:13

满分代码

#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
int a[100001];
long long ans;
int main(){
    int n,m;
    cin>>m>>n;
    for(int i=1;i<=m;i++){
        cin>>a[i];
    }sort(a+1,a+m+1);
    for(int i=1;i<=n;i++){
        int x;
        cin>>x;
        int pos1,pos2;
        pos1=lower_bound(a+1,a+m+1,x)-a;
        pos2=pos1-1;
        if(pos1==m+1)ans+=x-a[m];
        else if(pos1==1)ans+=a[1]-x;
        else ans+=min(abs(a[pos1]-x),abs(x-a[pos2]));
    }cout<<ans;
    return 0;
}

by jzm_2024 @ 2024-08-11 14:14:09

求关注


上一页 |