task#0全RE

P1678 烦恼的高考志愿

MoonShaft @ 2023-12-04 13:21:41

救救……本地自己早了好几个数据也没看到有报错,结果一提交发现task0全RE,只有task1看了别人改long long过了。是小白完全找不到错误来源,也没法下测试数据TAT


by _IOI_THANKFUL @ 2023-12-04 13:25:00

@MoonShaft 您的代码是啥?


by MoonShaft @ 2023-12-04 22:26:35

@ZhengyueFan 啊不好意思,我不知道这个发帖子不是自带代码的XD。我看别人发都是自带代码以为是自带的,小蒟蒻让各位见笑了,我这就发 (甚至现去查了`怎么打)


#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll m,n,ans;
ll sch[1000010]{0},stu[1000010]{0};//100w大数组绝对够用;
                            //声明;
int fd2(ll st,ll ed,ll obj);//二分函数;

int main(){
    cin>>m>>n;
    for(int i=1;i<=m;i++)
        cin>>sch[i];
    for(int i=1;i<=n;i++)
        cin>>stu[i];
    sort(sch+1,sch+m+1);
    for(int i=1;i<=n;i++)
        ans+=fd2(1,m,stu[i]);//逐次累加小答案得到最终答案 
    cout<<ans<<endl;
    return 0;
}

int fd2(ll st,ll ed,ll obj){//始点设为1 ,终点设为len 
    int flg=(st+ed)/2;
                //返回判断 
    if(sch[flg]==obj)/*恰好找到返回0*/ return 0;
    if(sch[st+1]==sch[ed] && obj>sch[st] && obj<sch[ed])//长度为2且目标在数组中,输出大减小,是一个正值 
        return((obj-sch[st]<sch[ed]-obj)?(obj-sch[st]):(sch[ed]-obj));//问号表达式输出较小值
    else if(obj<=sch[st]) return(sch[st]-obj);//********今后应当返回绝对值而非这样判断 
    else if(obj>=sch[ed]) return(obj-sch[ed]);/*当obj 前/后 无数据时仍然返回正值*/  
                //递归判断 
    if(obj<sch[flg])
        fd2(st,flg,obj);
    else if(obj>sch[flg])
        fd2(flg,ed,obj);
}   

by darkmonster @ 2023-12-04 22:57:26

@MoonShaft 数组太大超内存,或者你递归太浪费时间了,开成100005再用循环写二分看看吧


|