456laji @ 2020-05-28 22:25:14
我下载了样例一的测试点,测试点的n ,m 分别是429,517。
但是我的代码没有办法输入到429,即使手动输入也没有办法,这是为什么呢?
#include<bits/stdc++.h>
#define IO std::ios::sync_with_stdio(0),cin.tie(0)
using namespace std;
typedef long long ll;
const int N=2e7+10;
int c[N];
typedef struct{
ll num;
int a;
int b;
}STU;
STU stu[N];
ll cmp(STU s1,STU s2)
{
return s1.num < s2.num;
}
int main()
{
IO ;
ll m,n,len=0;
cin>>n>>m;
for(int i=0;i<n;i++)
{
cin>>stu[len].num;
stu[len].a=1;stu[len].b=0;
len++;
}
for(int i=0;i<m;i++)
{
cin>>stu[len].num;
stu[len].a=0,stu[len].b=1;
len++;
}
sort(stu,stu+len,cmp);
ll res_a=-1,res_b=-1,sum=0,pa,pb;
for(int i=0;i<len;i++)
{
if(stu[i].a)
{
res_a=stu[i].num;
pa=i;
}
if(stu[i].b)
{
res_b=stu[i].num;
pb=i;
}
if(res_a>=0&&res_b>=0)
{
sum+=abs(res_a-res_b);//printf("a=%lld b=%lld sum=%lld \n",res_a,res_b,sum);
stu[pa].a=0;
stu[pb].b=0;
res_a=-1,res_b=-1;
}
}
res_a=-1,res_b=-1,pa,pb;
for(int i=len-1;i>=0;i--)
{
if(stu[i].a)
{
res_a=stu[i].num;
pa=i;
}
if(stu[i].b)
{
res_b=stu[i].num;
pb=i;
}
if(res_a>=0&&res_b>=0)
{
sum+=abs(res_a-res_b);//printf("a=%lld b=%lld sum=%lld \n",res_a,res_b,sum);
stu[pa].num=-1;
stu[pb].num=-1;
res_a=-1,res_b=-1;
}
}
printf("%lld\n",sum);
return 0;
}
by 囧仙 @ 2020-05-28 22:47:26
@456laji
如果是控制台的话,因为缓存区的问题,是不能一次性输入太多东西的吧。
by Terrible @ 2020-05-28 22:50:37
文件读入
freopen("P1678_1.in","r",stdin);
by Terrible @ 2020-05-28 22:51:20
文件放到与你程序同级的文件夹里。
by 456laji @ 2020-05-28 22:57:56
@囧仙 是,就是控制台。原来是这样,那我改成sacnf应该可以吧。谢谢你,我试试。
by 456laji @ 2020-05-28 23:01:49
@Terrible 我放进去了,但是不是运行错误,就是内存超限。
by B_1168 @ 2020-05-29 05:08:16
@456laji 是scanf()
不是sacnf()