Рубрики

Лучший способ приблизиться к конкурентному программированию

Эта статья помогает всем, кто хочет начать с конкурентного программирования. Единственное обязательное условие — знание языка программирования.

Теперь давайте найдем лучший подход к конкурентному программированию. Пожалуйста, обратите внимание:

  1. Нужно прочитать правильный формат ввода и вывода, потому что большинство новичков допускают ошибки при наличии дополнительных выводов для вывода на печать. Поэтому, пожалуйста, будьте осторожны с форматом вывода. Пример — «Пожалуйста, введите следующий номер:» и «Вывод:.
  2. Проанализируйте проблемные ограничения перед написанием кода, потому что большую часть времени вы писали код, который является грубой силой и не будет работать в заданном ограничении по времени.

Ниже приведены некоторые проблемы, с которыми вы можете столкнуться, если вы новичок. :

  1. Ограничение времени : дается в секундах. Это дает вам представление о порядке правильного решения. Рассмотрим следующую ситуацию. Предел времени = 1 сек.
    Допустим, за 1 секунду примерно можно выполнить 10 ^ 8 операций.
    Если вы пишете программу порядка O (N ^ 2), и в задаче есть T тестовых случаев. Тогда общий порядок вашей программы становится O (T * N ^ 2).
    Если T <= 1000 и N <= 1000, то (без учета скрытых констант в асимптотических обозначениях) ваш код может быть не принят в худшем случае, поскольку 1000 * 1000 * 1000 — это 10 ^ 9 операций, что означает 10 секунд.
    Чтобы избежать TLE, всегда думайте о худших тестовых случаях, которые возможны для проблемы, и анализируйте свой код в этой ситуации.
  2. Ошибка во время выполнения : это одна из наиболее часто встречающихся проблем у новичков. Основной причиной может быть:
    1. Ошибка сегментации: Это незаконный доступ к адресу памяти.
      например, int [] array = new int [100]; System.out.println (массив [101]);
    2. Объявление массива более 10 ^ 8.
    3. Модуль деления и взятия с 0.
    4. Вы должны знать, как использовать GDB, которая поможет вам исправить ошибку во время выполнения.
  3. Ошибка компиляции : это одна из ошибок, с которой часто сталкиваются при программировании на C / C ++.
  4. Неправильный ответ : всякий раз, когда вы сталкиваетесь с WA, напишите код грубой силы и убедитесь, что он идеален. Теперь создайте тестовые случаи, используя случайную функцию в C ++. Запустите ваш код на этих тестовых примерах и сопоставьте вывод. Теперь подумайте о угловых случаях, которые помогут вам найти проблему в вашем алгоритме.

  5. IntOverflow : во многих случаях по незнанию вы превысите максимальное значение, которое может быть сохранено в примитивном типе int. например, ограничения: 0 <num1, num2 <= 10 ^ 9

    #include<iostream.h>

    int main()

    {

        int num1, num2;

        cin >> num1 >> num2;

        int answer = num1 + num2;

      

        // ошибка, если num1 и num2 большие

        // числа

        cout<< answer; 

      

        return 0;

    }

    Вышеуказанная программа не всегда будет работать правильно, потому что (2 * 10 ^ 9) может превышать максимальное значение, которое может быть сохранено в INTS. то есть 10 ^ 9. Поэтому в этом случае вам придется использовать примитивный тип данных long long int или unsigned int для ответа.

  6. Сравнение дублей :

    int main()

    {

        float a ;

        cin >> a;

        if (a == 10)

          cout << “YES”;

    }

    Типы данных типа float и double не имеют бесконечной точности. Остерегайтесь (точность 6/15 для них соответственно). Поэтому всегда используйте запас (~ 0,0000001) при сравнении. Пример —

    if (abs(a -10) < (0.0000001))
    {
        cout << “YES”;
    }
    

Другие полезные пункты:
Иногда, когда вы застряли. Проверьте время выполнения другого принятого кода и проанализируйте порядок заказа решения и объем памяти, который разрешен.

  1. 4 МБ ~ целочисленный массив размером 10 ^ 6 (при условии, что int занимает 4 байта) или двумерный массив размером 10 ^ 3 * 10 ^ 3

Стандартные ограничения памяти в большинстве проблем составляют порядка 256 МБ.

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

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

Эта статья предоставлена Ujjwal Kanodia. Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью и отправить ее по почте на contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Лучший способ приблизиться к конкурентному программированию

0.00 (0%) 0 votes