Created
June 27, 2020 05:40
-
-
Save tsathis/ced935eec20f07c391a3152e55dee555 to your computer and use it in GitHub Desktop.
my c++ starter template ##cpp ##competitive
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <bits/stdc++.h> | |
using namespace std; | |
#define mp make_pair | |
#define fi first | |
#define se second | |
#define pb push_back | |
#define all(x) begin((x)), end((x)) | |
#define rall(x) rbegin((x)), rend((x)) | |
#define foru(i, a, n) for (int i = (int)(a); i <= (int)(n); ++i) | |
#define ford(i, a, n) for (int i = (int)(n); i >= (int)(a); --i) | |
#define nl cout << '\n' | |
#define n_l '\n' | |
#ifdef DEBUG | |
#define dbg(...) cout << "[" << #__VA_ARGS__ << "]: "; cout << to_string(__VA_ARGS__) << endl | |
template <typename T, size_t N> int SIZE(const T (&t)[N]){ return N; } template<typename T> int SIZE(const T &t){ return t.size(); } string to_string(const string s, int x1=0, int x2=1e9){ return '"' + ((x1 < s.size()) ? s.substr(x1, x2-x1+1) : "") + '"'; } string to_string(const char* s) { return to_string((string) s); } string to_string(const bool b) { return (b ? "true" : "false"); } string to_string(const char c){ return string({c}); } template<size_t N> string to_string(const bitset<N> &b, int x1=0, int x2=1e9){ string t = ""; for(int __iii__ = min(x1,SIZE(b)), __jjj__ = min(x2, SIZE(b)-1); __iii__ <= __jjj__; ++__iii__){ t += b[__iii__] + '0'; } return '"' + t + '"'; } template <typename A, typename... C> string to_string(const A (&v), int x1=0, int x2=1e9, C... coords); int l_v_l_v_l = 0, t_a_b_s = 0; template <typename A, typename B> string to_string(const pair<A, B> &p) { l_v_l_v_l++; string res = "(" + to_string(p.first) + ", " + to_string(p.second) + ")"; l_v_l_v_l--; return res; } template <typename A, typename... C> string to_string(const A (&v), int x1, int x2, C... coords) { int rnk = rank<A>::value; string tab(t_a_b_s, ' '); string res = ""; bool first = true; if(l_v_l_v_l == 0) res += n_l; res += tab + "["; x1 = min(x1, SIZE(v)), x2 = min(x2, SIZE(v)); auto l = begin(v); advance(l, x1); auto r = l; advance(r, (x2-x1) + (x2 < SIZE(v))); for (auto e = l; e != r; e = next(e)) { if (!first) { res += ", "; } first = false; l_v_l_v_l++; if(e != l){ if(rnk > 1) { res += n_l; t_a_b_s = l_v_l_v_l; }; } else{ t_a_b_s = 0; } res += to_string(*e, coords...); l_v_l_v_l--; } res += "]"; if(l_v_l_v_l == 0) res += n_l; return res; } void dbgm(){;} template<typename Heads, typename... Tails> void dbgm(Heads H, Tails... T){ cout << to_string(H) << " | "; dbgm(T...); } | |
#define dbgm(...) cout << "[" << #__VA_ARGS__ << "]: "; dbgm(__VA_ARGS__); cout << endl | |
#define log(...) do{ printf(__VA_ARGS__); } while (0) | |
#else | |
#define dbg(...) while(0){} | |
#define dbgm(...) while(0){} | |
#define log(...) while(0){} | |
#endif | |
template<typename T> | |
void pop_front(std::vector<T>& vec) | |
{ | |
assert(!vec.empty()); | |
vec.front() = std::move(vec.back()); | |
vec.pop_back(); | |
} | |
const int INF = 0x3f3f3f3f; | |
typedef long long ll; | |
typedef vector<int> vi; | |
template<class T> bool uin(T &a, T b) { return a > b ? (a = b, true) : false; } | |
template<class T> bool uax(T &a, T b) { return a < b ? (a = b, true) : false; } | |
int main() { | |
ios::sync_with_stdio(false); | |
cin.tie(nullptr); | |
cout.precision(10); | |
cout << fixed; | |
#ifdef LOCAL | |
freopen("input.txt", "rt", stdin); | |
#endif | |
//... | |
#ifdef LOCAL | |
cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n"; | |
#endif | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment