Сайт оценки постоянно повторяет, что мой код превышен - PullRequest
0 голосов
/ 08 февраля 2019

хорошо, я пытался решить проблему Найди Корову![Брайан Дин, 2012] Я считаю, что это хорошо работает в «Visual Studio» и других IDE.Но в "code up" сайте, который оценивает мой код ... он продолжает говорить, что мой код превысил ограничение по времени ... Есть ли проблемы с моим кодом?

Проблема в ИМЕ ПРОБЛЕМЫ: cowfind

ФОРМАТ ВХОДА:

  • Строка 1: строка скобок длиной N (1 <= N <= 50 000). </li>

SAMPLE INPUT (файл cowfind.in):

)((()())())

ФОРМАТ ВЫВОДА:

  • Строка 1: количество возможных положений, в которых может стоять Бесси, то есть количество различных париндексы x

ВЫБОР ВЫБОРА (файл cowfind.out):

4

ДЕТАЛИ ВЫХОДА:

Есть 4 возможных местоположения для Бесси, указанных ниже:

1.

)((()())())
 ^^   ^^

2.

)((()())())
  ^^  ^^

3.

)((()())())
  ^^     ^^

4.

)((()())())
 ^^      ^^

Код:

    #include <stdio.h>
    #pragma warning(disable:4996)
    int main() {
        char c[50000];
        int i = 0;
        int j;
        int num = 0;
        while (scanf("%c", &c[i]) == 1)i++;
        c[i] = '\0';
        i = 0;


        while (c[i + 1] != '\0') {
                if ( (c[i] == c[i + 1]) && c[i] == '(') {
                j = i + 2;
                while (c[j + 1] != '\0') {
                    if ((c[j] == c[j + 1]) && c[j] == ')') {
                        num++;
                    }
                    j++;
                }
            }
            i++;
        }

        printf("%d", num);

    }

1 Ответ

0 голосов
/ 08 февраля 2019

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

#include <stdio.h>


int main(void)
{
    long positions = 0; //  Count positions where Bessie may be standing.
    long opens = 0;     //  Count number of times "((" has been seen.
    char previous = 0;  //  Remember previous character.

    //  Loop reading characters.
    while (1)
    {
        //  Get next character.
        int next = getchar();

        //  If there was no next character or the line ended, we are done.
        if (next == EOF || next == '\n') break;

        //  Count the number of times "((" has been seen.
        if (next == '(' && previous == '(')
            ++opens;

        //  When we see "))", add one position for each "((" that precedes it.
        if (next == ')' && previous == ')')
            positions += opens;

        //  Remember the character for the next iteration.
        previous = next;
    }

    //  Show the result.
    printf("%ld\n", positions);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...