banner
NEWS LETTER

hsn的及其Pythonic的CPP竞赛模板

Scroll down
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <bits/stdc++.h>
#define endl "\n"
#define fastio std::ios::sync_with_stdio(false), std::cin.tie(nullptr)
#define let auto
using i64 = long long;
template <typename... Args> void inpm(Args &...args) { ((std::cin >> args), ...); }

class Range {
int start_, end_, step_;
int current_;

public:
Range(int end) : start_(0), end_(end), step_(1), current_(0) {}
Range(int start, int end, int step = 1)
: start_(start), end_(end), step_(step), current_(start) {}

class Iterator {
int current_, end_, step_;

public:
Iterator(int current, int end, int step) : current_(current), end_(end), step_(step) {}

int operator*() const { return current_; }

Iterator &operator++() {
current_ += step_;
return *this;
}

bool operator!=(const Iterator &other) const {
return step_ > 0 ? current_ < other.current_ : current_ > other.current_;
}
};

Iterator begin() const { return Iterator(start_, end_, step_); }
Iterator end() const { return Iterator(end_, end_, step_); }
};

template <typename T> T input() {

T val;
std::cin >> val;
return val;
}
template <typename T0, typename... Ts> void print(T0 t0, Ts... ts) {
std::cout << t0;
if constexpr (sizeof...(ts) > 0) {
std::cout << " ";
print(ts...);
} else
std::cout << endl;
}
template <typename T>
void print(std::vector<T> vec, std::string sep = " ", std::string end = "\n") {
let n = vec.size();
for (let i : Range(n)) {
if (i != 0) {
std::cout << sep;
}
std::cout << vec[i];
}
std::cout << end;
}
template <typename T> std::vector<T> inpl() {
int n = input<int>();
std::vector<T> val(n);
for (int i = 0; i < n; i++) {
std::cin >> val[i];
}
return val;
}
template <typename T> std::vector<T> inpl(size_t size) {
std::vector<T> val(size);
for (int i = 0; i < size; i++) {
std::cin >> val[i];
}
return val;
}

template <typename T, typename TIter = decltype(std::begin(std::declval<T>()))>
constexpr auto enumerate(T &&iterable) {
struct iterator {
size_t i;
TIter iter;
bool operator!=(const iterator &other) const { return iter != other.iter; }
void operator++() {
++i;
++iter;
}
auto operator*() const { return std::tie(i, *iter); }
};
struct iterable_wrapper {
T iterable;
auto begin() { return iterator{0, std::begin(iterable)}; }
auto end() { return iterator{0, std::end(iterable)}; }
};
return iterable_wrapper{std::forward<T>(iterable)};
}

我很可爱,请给我钱

其他文章