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再用循环写二分看看吧