Шаблон для раундов КФ и других соревнований С++
Разница между ru6 и ru7, 254 символ(ов) изменены
Все мы хотим писать код быстрее и проще, особенно на соревнованиях, когда от времени отправки решения зависит место в таблице. Я собрал небольшой шаблон для соревнований по спортивному программированию.↵

<spoiler summary="Шаблон">↵
~~~~~C++↵
#include <iostream>↵
#include <string>↵
#include <vector>↵
#include <map>↵
#include <set>↵
#include <deque>↵
#include <random>↵
#include <unordered_map>↵
#include <unordered_set>↵
#include <algorithm>↵
#include <cmath>↵
#include <ctime>↵

using namespace std;↵

typedef long long ll;↵
typedef string str;↵

#define all(x) x.begin(),x.end()↵
#define range(i,
 n) for (int i=0;i<nint(n);++i)↵
#define range(i, s, f) for (int i=(s);i<int(f)
;++i)↵
#define rrange(i,n) for (int i=
n(n)-1;i>=0;--i)↵
#define mp make_pair↵
#define CF(x) int x;cin >> x;while(x--)↵
#define md(x) if (x>=mod) x%=mod↵

int mod = 1e9l + 7;↵

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, 
const 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, 
const pair<T1, T2>& p) { cout << p.first << ' ' << p.second; return out; }↵

signed main()↵
{↵
ios::sync_with_stdio(0);↵
cin.tie(0);
 
cout.tie(0);
 // do nothing
}↵
~~~~~↵
</spoiler>↵

[cut]↵

Что тут есть?↵
==================↵
Ввод/вывод↵
------------------↵
Несколько строк которые обычно всегда ускоряют ввод/вывод
 (cout.tie(0) ничего не делает):↵

~~~~~C++↵
ios::sync_with_stdio(0);↵
cin.tie(0);↵
cout.tie(0);↵
~~~~~↵
С помощью этих строк, можно выводить и считывать вектора и пары, с помощью стандартных операторов:↵

~~~~~C++↵
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, 
const 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, 
const pair<T1, T2>& p) { cout << p.first << ' ' << p.second; return out; }↵
~~~~~↵
Теперь можно просто делать вот так (Напомню вместо int можно использовать что угодно):↵

~~~~~C++↵
vector<int> a(n);↵
cin >> a;↵
cout << a;↵
pair<int,int> p;↵
cin >> p;↵
cout << p;↵
~~~~~↵
Дефайны↵
------------------↵
Один из самых полезных дефайнов:↵

~~~~~C++↵
#define all(x) x.begin(),x.end()↵
~~~~~↵
Теперь можно использовать:↵

~~~~~C++↵
sort(all(x))↵
~~~~~↵
Вместо↵

~~~~~C++↵
sort(x.begin(),x.end())↵
~~~~~↵
Дефайн специально для раундов КФ, умеет запускать несколько тестов:↵

~~~~~C++↵
#define CF(x) int x;cin >> x;while(x--)↵
~~~~~↵
Теперь можно делать так:↵

~~~~~C++↵
CF(___) {↵
 //код↵
}↵
~~~~~↵
Немного упрощений для циклов:↵

~~~~~C++↵
#define range(i,n) for (int i=0;i<n;++i)↵
#define range(i, s, f) for (int i=(s);i<int(f);++i)↵
#define rrange(i,n) for (int i=n-1;i>=0;--i)↵
~~~~~↵
Этот дефайн ускорит ваш код, если вы часто используете модули. mod &mdash; глобальная переменная. ↵

~~~~~C++↵
#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 Первая редакция (сохранено в черновиках)