求救

P1678 烦恼的高考志愿

彭科壹 @ 2021-10-04 14:32:33


#include <bits/stdc++.h>
using namespace std;
long long q,w,a[100000000],b[100000000],ans=0;
int main()
{
    cin>>q>>w;
    for(int i=1;i<=q;i++){
        cin>>a[i];
    }   
    for(int i=1;i<=w;i++){
        cin>>b[i];
    }
    for(int i=1;i<=w;i++){
        int left=1,right=q;
        int mid=(left+right)/2;
        while(left<right){
            if(left<=mid){
                left=mid+1;
            }
            else{
                right=mid;
            }
        }
        ans+=a[mid]-b[i];
    }
    cout<<ans;
    return 0;
}

by Spoilme @ 2021-10-07 21:42:07

不是判断mid与left的大小, 当然q=right+1;

而是判断a[mid],b[i],如果a[mid]>b[i]那么right=mid;

如果a[mid]<=b[i]那么left=mid+1;

当算完以后,ans+=mid(abs(a[l]-x),abs(a[l-l]-x);

这只是70分代码

要判断一下,a[1]的值也有可能大于b[i]的值,所以在ans+=mid(abs(a[l]-x),abs(a[l-l]-x);前要加上if(a[1]>=b[i])ans+=a[1]-b[i];

这是100分代码

希望你能写对!!!


|