救命!最后一个点开longlong也过不去!

P1678 烦恼的高考志愿

我是歌者 @ 2024-08-11 14:31:34

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

by BGM114514 @ 2024-08-11 14:39:54

别问为什么,问就是数组开的不够大。


by BGM114514 @ 2024-08-11 14:40:05

@我是歌者


by 我是歌者 @ 2024-08-11 14:45:59

@BGM114514 开到顶了也没过。。。


by 我是歌者 @ 2024-08-11 14:47:07

@BGM114514 开到30000000也没过。


by BGM114514 @ 2024-08-11 14:55:54

@我是歌者

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

by 我是歌者 @ 2024-08-11 15:00:03

@BGM114514 谢谢谢谢


by C929_chloe @ 2024-08-14 10:27:00

有没有可能是因为你用的万能头......


|