70分,3,8,10点没过。用了二分函数,请你伸出援手!!!

P1678 烦恼的高考志愿

623严佳冶 @ 2021-05-16 19:05:31

#include<bits/stdc++.h>
using namespace std;
int a[100005],b[100005];
int m,n,sum=0;

int main(){
    cin>>m>>n;
    for(int i=1;i<=m;i++)//wkkk
        cin>>a[i];
    sort(a+1,a+m+1);/////
    for(int i=1;i<=n;i++){
        int p1=0,p2=0,pp=0;
        cin>>b[i];
        p1=abs(a[ upper_bound(a+1,a+m+1,b[i])-a ] - b[i]);
        p2=abs(a[ upper_bound(a+1,a+m+1,b[i])-a-1 ] - b[i]);
        pp=min(p1,p2);
        sum+=pp;

    }
    cout<<sum<<endl;
    return 0;
}

by 一个人心 @ 2021-05-19 20:00:17

引用别人的数据

2 1
300 600
110
应该是 190

by SuipiX @ 2021-08-07 10:18:06

我做题时候有个错误点不知道跟你的一不一样

就是在 a数组的第0个位置 它是等于 0 的

然后 pp=min(p1,p2); 可能去取到 0 这就错了

这是我碰到的错点 不知道你是不是


by Winner8fighting @ 2021-08-07 10:56:38

@SuipiX

应该是 如果目标学校的位置刚好在数组的最左或最右,都+1或者-1判断,就越界了

特判一下

(昨天,我也这样错过┭┮﹏┭┮)

感谢@一个人心 的数据


|