Vishal Gupta Ответов: 3

Лимит времени превышен hackerearth


Я получаю ошибку превышения лимита времени при выполнении кода в компиляторе hackerearth, код выдает правильный вывод, но при отправке кода лимит времени превышает, пожалуйста, помогите в этом коде, он не оптимизирован.

Что я уже пробовал:

#include <stdio.h>

main()
{
    long long int n,q,i,x,y,a[1000001],s;

    scanf("%lld %lld",&n,&q);//no of array elements and querries

    for(i=1;i<=n;i++)
        scanf("%lld",&a[i]);

    while(q--)
    {
        x=0,y=0,s=0;

        scanf("%lld %lld",&x,&y);//upper and lower bound of arrays

        for(i=x;i<=y;i++)
            s = s + a[i];

        s = s/(y-x+1);
        printf("%lld\n",s);
    }
}

Richard MacCutchan

Что такое hackerearth?

Kornfeld Eliyahu Peter

Сайт, который дает вам задачи программирования и, возможно, задания mach для ваших навыков, основанных на решении...

Richard MacCutchan

Спасибо.

Richard MacCutchan

Спасибо Питеру за то, что он указал на ответ. Вы должны разместить свой вопрос на сайте, который доставляет вам неприятности.

Kornfeld Eliyahu Peter

Я думаю, что проблема в том, что код OP слишком медленный и для этого не может решить задачу. В этом случае я бы сказал, что мы не можем помочь - если ОП попытается получить работу через вызов, то эта помощь будет немного слишком большим обманом ИМХО...

3 Ответов

Рейтинг:
2

Jochen Arndt

Насколько я понимаю, вы используете онлайн-компилятор с тайм-аутом.

Хотя я не знаю наверняка, пока это происходит, возможно, компилятор инициализирует переменные стека со значениями по умолчанию (как и другие компиляторы, по крайней мере, с отладочными сборками), что заняло некоторое время.

У вас есть очень большой массив 64-битных целых чисел в стеке, занимающий 8 миллионов байт, что близко к размеру стека по умолчанию 8 МБ, используемому большинством компиляторов.

Вы можете попытаться выделить массив в куче с помощью malloc() после того, как размер был введен. Это общий метод.

Если вы хотите показать свои навыки, вам также следует избегать распространенных ошибок начинающих (начальный индекс массива не равен нулю, main не возвращает int) и проверка правильности вводимых пользователем данных (размеры больше нуля и ниже макс. значение, границы в пределах размера массива и верхняя граница больше нижней).


Рейтинг:
1

OriginalGriff

Мы не можем помочь вам исправить это: это ваш вызов, а не наш.
Но первое, что вам нужно сделать, это попытаться выяснить, сколько времени это займет: если вы не можете получить это с сайта, то импортируйте тот же код в свой собственный компилятор, используйте тот же набор данных и рассчитайте время.
Когда у вас есть это в качестве базовой линии, вы можете начать работать над тем, что улучшает его, и выяснить, где проходит основная часть времени. Существуют тривиальные улучшения, которые относительно просты, например, использование указателей вместо доступа к массивам, но основные улучшения, скорее всего, будут связаны с алгоритмическими изменениями. И мы не можем помочь вам в этом, так как мы понятия не имеем, что вопрос просит вас сделать - плюс это не было бы справедливым вызовом, если бы мы дали вам код для более эффективного способа сделать ту же самую работу.


Рейтинг:
0

Patrice T

Эти сайты бросают вам вызов.

Цитата:
разве он не оптимизирован?

Оптимизация-это как раз и есть цель задачи. Самое прямое решение никогда не бывает правильным.
Ваша программа оптимальна, если запрашивается 1 сумма, но не тогда, когда вам требуется много частичных сумм.
Иначе говоря, решение-это компромисс, вы тратите время на то, чтобы вычислить что-то, что поможет вам получить быстрые ответы.

Ваша задача состоит в том, чтобы найти, как это сделать, если мы дадим вам решение, то вы провалите вызов.