Все мы хотим писать код быстрее и проще, особенно на соревнованиях, когда от времени отправки решения зависит место в таблице. Я собрал небольшой шаблон для соревнований по спортивному программированию.↵
↵
<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 — глобальная переменная. ↵
↵
~~~~~C++↵
#define md(x) if (x>=mod) x%=mod↵
~~~~~↵
↵
<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<
#define range(i, s, f) for (int i=(s);i<int(f);++i)↵
#define rrange(i,n) for (int 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())
template<typename T>ostream& operator <<(ostream& out, const vector<T>& a) { range(i, a.size())
↵
template<typename T1, typename T2>istream& operator >>(istream& in, pair<T1, T2>& p) {
template<typename T1, typename T2>ostream& operator <<(ostream& out, const pair<T1, T2>& p) {
↵
signed main()↵
{↵
ios::sync_with_stdio(0);↵
cin.tie(0); ↵
cout.tie(0);
}↵
~~~~~↵
</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())
template<typename T>ostream& operator <<(ostream& out, const vector<T>& a) { range(i, a.size())
↵
template<typename T1, typename T2>istream& operator >>(istream& in, pair<T1, T2>& p) {
template<typename T1, typename T2>ostream& operator <<(ostream& out, const pair<T1, T2>& p) {
~~~~~↵
Теперь можно просто делать вот так (Напомню вместо 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 — глобальная переменная. ↵
↵
~~~~~C++↵
#define md(x) if (x>=mod) x%=mod↵
~~~~~↵