Все мы хотим писать код быстрее и проще, особенно на соревнованиях, когда от времени отправки решения зависит место в таблице. Я собрал небольшой шаблон для соревнований по спортивному программированию.
Что тут есть?
Ввод/вывод
Несколько строк которые обычно всегда ускоряют ввод/вывод:
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