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

Revision ru3, by antonkasko, 2022-10-07 21:45:42

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

Шаблон

Что тут есть?

Ввод/вывод

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

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

History

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