Шаблон для раундов КФ и других соревнований С++

Правка ru2, от antonkasko, 2022-10-07 21:43:16

Все мы хотим писать код быстрее и проще, особенно на соревнованиях, когда от времени отправки решения зависит место в таблице. Я собрал небольшой шаблон для соревнований по спортивному программированию.

Шаблон

Что тут есть?

Ввод/вывод

Несколько строк которые обычно всегда ускоряют ввод/вывод:

ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);

С помощью этих строк, можно выводить и считывать вектора и пары, с помощью стандартных операторов:

template<typename T>istream& operator >>(istream& in, vector<T>& a) { range(i, a.size()) cin >> a[i]; return in; }
template<typename T>ostream& operator <<(ostream& out, vector<T>& a) { range(i, a.size()) cout << a[i] << ' '; return out; }
template<typename T1, typename T2>istream& operator >>(istream& in, pair<T1, T2>& p) { cin >> p.first >> p.second; return in; }
template<typename T1, typename T2>ostream& operator <<(ostream& out, pair<T1, T2>& p) { cout << p.first << ' ' << p.second; return out; }
Теперь можно просто делать вот так (Напомню вместо int можно использовать что угодно):
vector<int> a(n);
cin >> a;
cout << a;
pair<int,int> p;
cin >> p;
cout << p;

Дефайны

Один из самых полезных дефайнов:
#define all(x) x.begin(),x.end()
Теперь можно использовать:
sort(all(x))
Вместо
sort(x.begin(),x.end())
Дефайн специально для раундов КФ, умеет запускать несколько тестов:
#define CF(x) int x;cin >> x;while(x--)
Теперь можно делать так:
CF(___) {
 //код
}
Немного упрощений для циклов:
#define range(i,n) for (int i=0;i<n;++i)
#define rrange(i,n) for (int i=n-1;i>=0;--i)
Этот дефайн ускорит ваш код, если вы часто используете модули. mod - глобальная переменная. 
#define md(x) if (x>=mod) x%=mod

История

 
 
 
 
Правки
 
 
  Rev. Язык Кто Когда Δ Комментарий
ru7 Русский antonkasko 2023-11-07 08:36:55 254
ru6 Русский antonkasko 2023-11-03 18:28:04 5
ru5 Русский antonkasko 2022-10-07 21:47:44 18
ru4 Русский antonkasko 2022-10-07 21:46:51 2 Мелкая правка: 'рованию.\n[cut]\n\' -> 'рованию.\n\n[cut]\n\'
ru3 Русский antonkasko 2022-10-07 21:45:42 163 (опубликовано)
ru2 Русский antonkasko 2022-10-07 21:43:16 4 Мелкая правка: 'i)\nЭтот дифайн ускор' -> 'i)\nЭтот дефайн ускор'
ru1 Русский antonkasko 2022-10-07 21:42:51 2994 Первая редакция (сохранено в черновиках)