求助#9RE
查看原帖
求助#9RE
206023
wzy050703楼主2024/10/21 14:32

用了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;
}
2024/10/21 14:32
加载中...