用了book = calloc(1000011, sizeof(char));进行桶排序,边界我都是>=0并且%1000000了,#9还是RE:Received signal 11,但是其他过了90分。这是一次性申请太多爆内存了吗?
附源码:
#include <stdio.h>
#include <stdlib.h>
char *book = NULL;
int findnear(int num)
{
int len = 0, isok = 0;
for (len; (num - len >= 0 || num + len <= 1000000); len++)
{
if (num + len >= 0 && num + len <= 1000000 && book[num + len] != 0)
{
isok = 1;
break;
}
if (num - len >= 0 && num - len <= 1000000 && book[num - len] != 0)
{
isok = -1;
break;
}
}
if (isok == 1)
return num + len;
if (isok == -1)
return num - len;
return -1;
}
int main()
{
book = calloc(1000011, sizeof(char));
if (book == NULL)
return 1;
int n;
scanf("%d", &n);
long long ans = 0;
int tmpin;
for (int i = 0; i < n; i++)
{
scanf("%d", &tmpin);
tmpin = tmpin % 1000000;
if (i == 0)
ans = tmpin;
else
{
int tf=findnear(tmpin);
if(tf>=0)
{
ans += abs(tmpin - tf);
}
}
book[tmpin] = 1;
}
printf("%lld", ans);
return 0;
}