StartCoding | С++ - Советы, библиотеки, гайды
91 subscribers
123 photos
4 videos
4 files
48 links
Welcome to C-Juniors — a channel about competitive programming, problem solving, and useful tools. Clear content, real skills, steady growth.
Download Telegram
Мир Двумерных Структур в C++: Вектор Векторов!

Представьте себе не просто линию чисел, а целую таблицу! В C++ мы можем создать такую "таблицу" с помощью std::vector векторов. Это как коробка, в которой лежат другие коробки с элементами.

[Переходим к коду показанном выше]
Что это значит?

vector<vector<int>> – мы создаем вектор, каждый элемент которого сам является вектором (vector<int>).

{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}} – инициализация двумерного вектора, где каждая внутренняя {} представляет собой "строку".

matrix[i][j] – чтобы получить доступ к элементу, мы используем два индекса: первый для строки, второй для столбца (помните, индексация начинается с 0!).

Двумерные векторы невероятно гибки и полезны для представления матриц, таблиц, игровых полей и многого другого!

#cpp #вектор #двумерныймассив #программирование #обучение
👍3🔥1
⚙️ Возможности такой матрицы!

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

Например: В выше написанном коде мы сначала объявили пустой вектор. Потом добавили к нему другой простой массив ({1, 2, 3}) - как элемент. Теперь этот массив стал первым элементов главного массива. А потом мы добавили другой такой же массив сделав его вторым элементом в главном массиве.

#cpp #вектор #двумерныймассив #программирование #обучение
👍2🔥1
Big O: Как не словить Time Limit?

В спортивном программировании мало написать рабочий код — он должен быть быстрым. Big O показывает, как время работы программы растет вместе с размером данных. Если твой алгоритм делает N^2 операций при массиве в 10^5, ты гарантированно получишь ошибку превышения времени (TLE).

С++ за секунду переваривает около 10^8 простых операций. Перед тем как кодить, всегда сопоставляй ограничения задачи с логикой: для 10^5 элементов ищи решение за O(N log N), а для 10^8 подойдет только чистый O(N).

Краткая шпаргалка:

O(1) — Магия (формулы).
O(log N) — Бинарный поиск.
O(N) — Один цикл.
O(N log N) — Сортировка.
O(N^2) — Вложенные циклы (яд для больших данных).

#cpp #algorithms #coding
👍3
Шаблон для соревнований: почему bits/stdc++.h — это база.

В спортивном программировании время на перечисление <vector>, <algorithm> и <map> — это потерянные минуты. Один хедер #include <bits/stdc++.h> заменяет десятки строк, подтягивая всю стандартную библиотеку GCC разом. В олимпиадном программировании это база, так как ускоряет подготовку, исключает ошибки забытых библиотек и работает в большинстве систем, включая Codeforces.

Это стандарт де-факто для олимпиадника: код чище, а риск получить CE (Compilation Error) из-за забытого инклуда — нулевой.

Что нужно знать:

Скорость: На время выполнения (Runtime) это не влияет, только на секунду дольше компилится у тебя на ПК.
Совместимость: Работает на всех топовых платформах (Codeforces, LeetCode, на олимпиадах), но может не завестись в Visual Studio.

#cpp #libraries #alghorithms
👍1
Идеальный компаратор через std::tie

В спортивном программировании часто нужно сортировать объекты по 3–4 критериям (например: баллы ↓, штраф ↑, время ↑). Вместо громоздких каскадов if-else, которые плодят баги, используй лексикографическое сравнение через std::tie. Оно сравнивает элементы последовательно: если первые равны, переходит ко вторым, и так далее.

// Сортировка: очки (desc), время (asc)
sort(players.begin(), players.end(), [](auto &a, auto &b) {
return tie(b.score, a.time) < tie(a.score, b.time);
});


Почему это стандарт:

Безопасность: Исключает риск нарушить правила строгого слабого упорядочивания (Strict Weak Ordering), за которые std::sort может выдать Runtime Error.
Читаемость: Весь приоритет сортировки виден в одной строке.
Zero-cost: Компилятор эффективно оптимизирует такие сравнения, не создавая лишних объектов в памяти.

#cpp #tie #comparator
👨‍💻2
Битовая магия — основы и скорость

В спортивном программировании битовые операции — это не просто способ сэкономить память, это инструмент для экстремального ускорения кода. Они выполняются процессором за один такт и заменяют тяжелые арифметические операции и условия.

int a = 5;      // 0101 в битах
int b = 3; // 0011 в битах
int res = a ^ b; // 0110 (XOR) -> 6


Краткий справочник:
& ( AND ) : Проверка бита. (n & 1) — проверка на нечетность (быстрее чем % 2).
| ( OR ) : Установка бита.
^ ( XOR ) : Инверсия. Помни: a ^ a = 0 (база для поиска одиночного числа).
<< / >> : Сдвиги. 1 << n — это 2^n за наносекунду.

Почему это важно:
Почти любая задача на подмножества или динамику по маскам строится на этих операциях. Битовый сдвиг влево на k позиций эквивалентен умножению на 2^k, но работает в разы быстрее.

#cpp #bitoperation #alghorithms
👍3