From 7454bd4d0d9b49fadf7bf96fac2d0f0ef750104c Mon Sep 17 00:00:00 2001 From: Segcolt Date: Mon, 16 Mar 2026 20:18:56 -0300 Subject: [PATCH] More problems --- .gitignore | 2 + CSES Problem Set/Convex Hull.cpp | 192 +++++++++++++++++++++++ CSES Problem Set/Point Location Test.cpp | 126 +++++++++++++++ CSES Problem Set/Polygon Area.cpp | 122 ++++++++++++++ 4 files changed, 442 insertions(+) create mode 100644 CSES Problem Set/Convex Hull.cpp create mode 100644 CSES Problem Set/Point Location Test.cpp create mode 100644 CSES Problem Set/Polygon Area.cpp diff --git a/.gitignore b/.gitignore index cd791a9..ee274c2 100644 --- a/.gitignore +++ b/.gitignore @@ -37,3 +37,5 @@ # Ignore gdb .gdb_history + +*sync* diff --git a/CSES Problem Set/Convex Hull.cpp b/CSES Problem Set/Convex Hull.cpp new file mode 100644 index 0000000..60d103d --- /dev/null +++ b/CSES Problem Set/Convex Hull.cpp @@ -0,0 +1,192 @@ +/* Problem URL: https://cses.fi/problemset/task/2195 */ + +#include +#include +#include + +using namespace std; +using namespace __gnu_pbds; + +template > +using ordered_set = tree; + +#define V vector + +#define rmin(a, b) a = min(a, b) +#define rmax(a, b) a = max(a, b) + +#define rep(i, lim) for (int i = 0; i < (lim); i++) +#define nrep(i, s, lim) for (int i = s; i < (lim); i++) + +#define repv(i, v) for (auto &i : (v)) +#define fillv(v) for (auto &itr_ : (v)) { cin >> itr_; } +#define sortv(v) sort(v.begin(), v.end()) +#define all(v) (v).begin(), (v).end() + +using vi = vector; +using vvi = vector; +using vvvi = vector; +using vvvvi = vector; + +using ll = long long; + +using vl = vector; +using vvl = vector; +using vvvl = vector; +using vvvvl = vector; + +template +auto operator<<(ostream &os, const vector &vec)->ostream& { + os << vec[0]; + for (size_t i = 1; i < vec.size(); i++) { + os << ' ' << vec[i]; + } + os << '\n'; + return os; +} + +template +auto operator>>(istream &is, vector &vec)->istream& { + for (auto &i : vec) { + is >> i; + } + return is; +} + +template +auto operator<<(ostream &os, const vector> &vec)->ostream& { + for (auto &i : vec) { + os << i[0]; + for (size_t j = 1; j < i.size(); j++) { + os << ' ' << i[j]; + } + os << '\n'; + } + return os; +} + +template +auto operator>>(istream &is, vector> &vec)->istream& { + for (auto &i : vec) { + for (auto &j : i) { + is >> j; + } + } + return is; +} + +const int oo = INT32_MAX >> 1; +const ll OO = INT64_MAX >> 1; + +struct pt { + ll x, y; + + pt() = default; + pt(ll x, ll y): x(x), y(y) {} + pt(const pt &a): x(a.x), y(a.y) {} + + friend istream &operator >> (istream &is, pt &a) { + is >> a.x >> a.y; + return is; + } + + friend ostream &operator << (ostream &os, pt a) { + os << a.x << ' ' << a.y << '\n'; + return os; + } + + ll operator ^ (pt b) { + return x * b.y - y * b.x; + } + + pt operator - (pt b) { + return pt(x - b.x, y - b.y); + } + + bool operator < (pt b) { + if (x == b.x) { + return y < b.y; + } + return x < b.x; + } +}; + +ll sarea2(pt a, pt b, pt c) { + return (b - a) ^ (c - b); +} + +int ccw(pt a, pt b, pt c) +{ + ll ar = sarea2(a, b, c); + return (ar > 0) - (ar < 0); +} + +V convex_hull(V v) +{ + sortv(v); + if (v.size() <= 2) { + return v; + } + + int n = v.size(); + + V ac; + V tmp; + + rep(i, n) { + while (ac.size() >= 2 && ccw(ac.end()[-2], ac.end()[-1], v[i]) > 0) { + ac.pop_back(); + } + ac.emplace_back(v[i]); + } + + for (int i = n - 1; i >= 0; i--) { + while (tmp.size() >= 2 && ccw(tmp.end()[-2], tmp.end()[-1], v[i]) > 0) { + tmp.pop_back(); + } + tmp.emplace_back(v[i]); + } + + ac.pop_back(); + tmp.pop_back(); + + repv(i, tmp) { + ac.emplace_back(i); + } + + return ac; +} + +void pre() +{ + +} + +#define TEST 0 + +void solve() +{ + int n; + cin >> n; + V a(n); + cin >> a; + auto conv = convex_hull(a); + cout << conv.size() << '\n'; + repv(i, conv) { + cout << i.x << ' ' << i.y << '\n'; + } +} + +int main() +{ + ios::sync_with_stdio(false); + cin.tie(nullptr); + + pre(); + + int t; + (TEST && cin >> t) || (t = 1); + while (t--) { + solve(); + } +} diff --git a/CSES Problem Set/Point Location Test.cpp b/CSES Problem Set/Point Location Test.cpp new file mode 100644 index 0000000..37a9f87 --- /dev/null +++ b/CSES Problem Set/Point Location Test.cpp @@ -0,0 +1,126 @@ +/* Problem URL: https://cses.fi/problemset/task/2189 */ + +#include +#include +#include + +using namespace std; +using namespace __gnu_pbds; + +template > +using ordered_set = tree; + +#define V vector + +#define rmin(a, b) a = min(a, b) +#define rmax(a, b) a = max(a, b) + +#define rep(i, lim) for (int i = 0; i < (lim); i++) +#define nrep(i, s, lim) for (int i = s; i < (lim); i++) + +#define repv(i, v) for (auto &i : (v)) +#define fillv(v) for (auto &itr_ : (v)) { cin >> itr_; } +#define sortv(v) sort(v.begin(), v.end()) +#define all(v) (v).begin(), (v).end() + +using vi = vector; +using vvi = vector; +using vvvi = vector; +using vvvvi = vector; + +using ll = long long; + +using vl = vector; +using vvl = vector; +using vvvl = vector; +using vvvvl = vector; + +template +auto operator<<(ostream &os, const vector &vec)->ostream& { + os << vec[0]; + for (size_t i = 1; i < vec.size(); i++) { + os << ' ' << vec[i]; + } + os << '\n'; + return os; +} + +template +auto operator>>(istream &is, vector &vec)->istream& { + for (auto &i : vec) { + is >> i; + } + return is; +} + +template +auto operator<<(ostream &os, const vector> &vec)->ostream& { + for (auto &i : vec) { + os << i[0]; + for (size_t j = 1; j < i.size(); j++) { + os << ' ' << i[j]; + } + os << '\n'; + } + return os; +} + +template +auto operator>>(istream &is, vector> &vec)->istream& { + for (auto &i : vec) { + for (auto &j : i) { + is >> j; + } + } + return is; +} + +const int oo = INT32_MAX >> 1; +const ll OO = INT64_MAX >> 1; + + +void pre() +{ + +} + +#define TEST 1 + +void solve() +{ + ll x1, y1, x2, y2, x3, y3; + cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3; + + x3 -= x2; + y3 -= y2; + x2 -= x1; + y2 -= y1; + + ll ar = x2 * y3 - y2 * x3; + + if (ar > 0) { + cout << "LEFT\n"; + return; + } + + if (ar < 0) { + cout << "RIGHT\n"; + return; + } + + cout << "TOUCH\n"; +} + +int main() +{ + ios::sync_with_stdio(false); + cin.tie(nullptr); + + pre(); + + int t; + (TEST && cin >> t) || (t = 1); + while (t--) { + solve(); + } +} diff --git a/CSES Problem Set/Polygon Area.cpp b/CSES Problem Set/Polygon Area.cpp new file mode 100644 index 0000000..41767ab --- /dev/null +++ b/CSES Problem Set/Polygon Area.cpp @@ -0,0 +1,122 @@ +/* Problem URL: https://cses.fi/problemset/task/2191 */ + +#include +#include +#include + +using namespace std; +using namespace __gnu_pbds; + +template > +using ordered_set = tree; + +#define V vector + +#define rmin(a, b) a = min(a, b) +#define rmax(a, b) a = max(a, b) + +#define rep(i, lim) for (int i = 0; i < (lim); i++) +#define nrep(i, s, lim) for (int i = s; i < (lim); i++) + +#define repv(i, v) for (auto &i : (v)) +#define fillv(v) for (auto &itr_ : (v)) { cin >> itr_; } +#define sortv(v) sort(v.begin(), v.end()) +#define all(v) (v).begin(), (v).end() + +using vi = vector; +using vvi = vector; +using vvvi = vector; +using vvvvi = vector; + +using ll = long long; + +using vl = vector; +using vvl = vector; +using vvvl = vector; +using vvvvl = vector; + +template +auto operator<<(ostream &os, const vector &vec)->ostream& { + os << vec[0]; + for (size_t i = 1; i < vec.size(); i++) { + os << ' ' << vec[i]; + } + os << '\n'; + return os; +} + +template +auto operator>>(istream &is, vector &vec)->istream& { + for (auto &i : vec) { + is >> i; + } + return is; +} + +template +auto operator<<(ostream &os, const vector> &vec)->ostream& { + for (auto &i : vec) { + os << i[0]; + for (size_t j = 1; j < i.size(); j++) { + os << ' ' << i[j]; + } + os << '\n'; + } + return os; +} + +template +auto operator>>(istream &is, vector> &vec)->istream& { + for (auto &i : vec) { + for (auto &j : i) { + is >> j; + } + } + return is; +} + +const int oo = INT32_MAX >> 1; +const ll OO = INT64_MAX >> 1; + + +void pre() +{ + +} + +#define TEST 0 + +void solve() +{ + int n; + cin >> n; + + V> a(n); + repv(i, a) { + cin >> i.first >> i.second; + } + + ll ar = 0; + rep(i, n) { + auto [x1, y1] = a[i]; + auto [x2, y2] = a[(i + 1) % n]; + + ar += x1 * y2 - y1 * x2; + } + + cout << abs(ar) << '\n'; +} + +int main() +{ + ios::sync_with_stdio(false); + cin.tie(nullptr); + + pre(); + + int t; + (TEST && cin >> t) || (t = 1); + while (t--) { + solve(); + } +}