十年OI一场空,不开long long见祖宗

P1678 烦恼的高考志愿

intabc @ 2024-06-30 15:06:27

如果你WA Subtask1 #1,请将程序中所有变量类型改long long。


by sz_zhangzhiyuan @ 2024-06-30 15:30:12

寻人启事:谁知道我朋友孙艺名和竺鳞暄的好友叫什么,我是张致远.如果谁看见了回答一下我,谢谢各位大佬


by cgxd @ 2024-07-01 15:40:46

long long 不够吧要unsigned long long才够吧(本人亲自试了一下)


by Kete @ 2024-07-03 13:55:18

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

我就把第四行int改成了unsigned long long 没想到Subtask1 #1还过了……

温馨提示:作者在没改以前:Subtask1 #1没过……


by Kete @ 2024-07-03 13:59:21

@cgxd

但……我只改了两个数组的类型


by Moya_Rao @ 2024-07-08 15:22:45

改了也没用啊 @intabc

你看我的代码:

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

测试点情况

WA 了最后一个点哟
求大佬帮我看看,到底哪里错了吧……


by clxykx @ 2024-07-10 15:26:21

@Moya_Rao 你这个没考虑 n == 1 的情况 比如: n = 1, m =1, 5 1 结果该为 4 ,但是你输出的是 1


|