From 81fa4b660294983e25e4f81ec72e4ad009741c63 Mon Sep 17 00:00:00 2001 From: Bruno Freitas Tissei <bft15@inf.ufpr.br> Date: Fri, 14 Aug 2020 14:17:28 -0300 Subject: [PATCH] Update and fix Signed-off-by: Bruno Freitas Tissei <bft15@inf.ufpr.br> --- README.md | 13 +- algorithms/geometry/circle.cpp | 66 +- algorithms/geometry/convex_hull.cpp | 38 +- algorithms/geometry/point.cpp | 90 +- algorithms/geometry/polygon.cpp | 88 +- algorithms/geometry/primitives.cpp | 5 +- algorithms/geometry/segment.cpp | 86 +- algorithms/graph/articulations_bridges.cpp | 75 +- algorithms/graph/bellman_ford.cpp | 70 +- algorithms/graph/bipartite_match.cpp | 62 +- algorithms/graph/centroid_decomposition.cpp | 78 +- algorithms/graph/dijkstra.cpp | 64 +- algorithms/graph/dinic.cpp | 96 +-- algorithms/graph/edmonds_karp.cpp | 90 +- algorithms/graph/floyd_warshall.cpp | 20 +- algorithms/graph/ford_fulkerson.cpp | 82 +- algorithms/graph/hld.cpp | 166 ++-- algorithms/graph/hopcroft_karp.cpp | 105 +-- algorithms/graph/kosaraju.cpp | 100 +-- algorithms/graph/kruskal.cpp | 44 +- algorithms/graph/lca.cpp | 108 +-- algorithms/graph/min_cost_max_flow.cpp | 108 +-- algorithms/graph/prim.cpp | 66 +- algorithms/graph/steiner_tree.cpp | 36 +- algorithms/graph/tarjan.cpp | 98 +-- algorithms/graph/topological_sort.cpp | 74 +- algorithms/graph/travelling_salesman.cpp | 38 +- algorithms/math/big_integer.cpp | 562 ++++++------- algorithms/math/binary_exponentiation.cpp | 35 +- algorithms/math/chinese_remainder_theorem.cpp | 44 +- algorithms/math/euler_totient.cpp | 20 +- algorithms/math/extended_euclidean.cpp | 10 +- algorithms/math/fft.cpp | 172 ++-- algorithms/math/gale_shapley.cpp | 62 +- algorithms/math/karatsuba.cpp | 78 +- algorithms/math/legendre.cpp | 12 +- .../math/linear_diophantine_equation.cpp | 38 +- algorithms/math/matrix.cpp | 38 +- algorithms/math/miller_rabin.cpp | 30 +- .../math/modular_multiplicative_inverse.cpp | 6 +- algorithms/math/pollard_rho.cpp | 40 +- algorithms/math/sieve_of_eratosthenes.cpp | 20 +- algorithms/paradigm/dp_divide_and_conquer.cpp | 32 + algorithms/paradigm/edit_distance.cpp | 26 +- algorithms/paradigm/kadane.cpp | 26 +- algorithms/paradigm/lis.cpp | 16 +- .../paradigm/longest_common_subsequence.cpp | 48 +- algorithms/paradigm/ternary_search.cpp | 24 +- algorithms/string/aho_corasick.cpp | 174 ++-- algorithms/string/booth.cpp | 44 +- algorithms/string/kmp.cpp | 46 +- algorithms/string/z-function.cpp | 26 +- algorithms/structure/avl.cpp | 140 ++-- algorithms/structure/bit.cpp | 26 +- algorithms/structure/bit2d.cpp | 33 +- algorithms/structure/bitmask.cpp | 48 +- algorithms/structure/disjoint_set.cpp | 48 +- algorithms/structure/hash_function.cpp | 26 +- algorithms/structure/lazy_segment_tree.cpp | 114 +-- algorithms/structure/mo_algorithm.cpp | 54 +- algorithms/structure/policy_tree.cpp | 23 +- algorithms/structure/segment_tree.cpp | 50 +- algorithms/structure/segment_tree_2d.cpp | 182 ++-- algorithms/structure/sparse_table.cpp | 48 +- algorithms/structure/sqrt_decomposition.cpp | 76 +- algorithms/structure/trie.cpp | 82 +- caderno.pdf | Bin 275624 -> 277509 bytes contests/Cadernaveis/BALE11.cpp | 44 +- contests/Cadernaveis/CAVALOS.cpp | 104 +-- contests/Cadernaveis/CF342E.cpp | 320 +++---- contests/Cadernaveis/DESCULPA.cpp | 50 +- contests/Cadernaveis/EASUDOKU.cpp | 86 +- contests/Cadernaveis/ENGARRAF.cpp | 92 +-- contests/Cadernaveis/GINCAN11.cpp | 48 +- contests/Cadernaveis/JANELA13.cpp | 60 +- contests/Cadernaveis/KOCH.cpp | 782 +++++++++--------- contests/Cadernaveis/KRAKOVIA.cpp | 412 ++++----- contests/Cadernaveis/LA3635.cpp | 54 +- contests/Cadernaveis/LA4509.cpp | 136 +-- contests/Cadernaveis/LA5138.cpp | 106 +-- contests/Cadernaveis/LA5220.cpp | 108 +-- contests/Cadernaveis/MANUT.cpp | 102 +-- contests/Cadernaveis/MCAIRO.cpp | 78 +- contests/Cadernaveis/NTICKETS.cpp | 122 +-- contests/Cadernaveis/ORKUT.cpp | 150 ++-- contests/Cadernaveis/TOPOLAND.cpp | 114 +-- contests/Cadernaveis/TUBOS.cpp | 74 +- contests/Cadernaveis/URI1033.cpp | 114 +-- contests/Cadernaveis/URI1128.cpp | 96 +-- contests/Cadernaveis/URI1130.cpp | 90 +- contests/Cadernaveis/URI1135.cpp | 112 +-- contests/Cadernaveis/URI1141.cpp | 176 ++-- contests/Cadernaveis/URI1356.cpp | 82 +- contests/Cadernaveis/URI1364.cpp | 62 +- contests/Cadernaveis/URI1464.cpp | 84 +- contests/Cadernaveis/URI1477.cpp | 170 ++-- contests/Cadernaveis/URI1850.cpp | 100 +-- contests/Cadernaveis/URI1852.cpp | 156 ++-- contests/Cadernaveis/URI1860.cpp | 38 +- contests/Cadernaveis/URI1932_ite.cpp | 22 +- contests/Cadernaveis/URI1932_rec.cpp | 40 +- contests/Cadernaveis/URI2305.cpp | 48 +- contests/Cadernaveis/UVA10594.cpp | 178 ++-- contests/Cadernaveis/UVA10679_aho.cpp | 200 ++--- contests/Cadernaveis/UVA10679_kmp.cpp | 76 +- contests/Cadernaveis/qTREE.cpp | 336 ++++---- contests/ICPC_LA14/A.cpp | 28 +- contests/ICPC_LA14/B.cpp | 44 +- contests/ICPC_LA14/C.cpp | 86 +- contests/ICPC_LA14/H.cpp | 32 +- contests/ICPC_LA14/I.cpp | 60 +- contests/ICPC_LA16/A.cpp | 14 +- contests/ICPC_LA16/B.cpp | 80 +- contests/ICPC_LA16/D.cpp | 54 +- contests/ICPC_LA16/F.cpp | 28 +- contests/ICPC_LA16/G.cpp | 108 +-- contests/ICPC_LA16/H.cpp | 36 +- contests/ICPC_LA16/J.cpp | 38 +- contests/ICPC_LA16/K.cpp | 174 ++-- contests/ICPC_LA17/B.cpp | 74 +- contests/ICPC_LA17/C.cpp | 72 +- contests/ICPC_LA17/D.cpp | 90 +- contests/ICPC_LA17/E.cpp | 48 +- contests/ICPC_LA17/F.cpp | 144 ++-- contests/ICPC_LA17/G.cpp | 74 +- contests/ICPC_LA17/H.cpp | 12 +- contests/ICPC_LA17/I.cpp | 186 ++--- contests/ICPC_LA17/J.cpp | 70 +- contests/ICPC_LA18/A.cpp | 16 +- contests/ICPC_LA18/B.cpp | 44 +- contests/ICPC_LA18/C.cpp | 52 +- contests/ICPC_LA18/E.cpp | 54 +- contests/ICPC_LA18/F.cpp | 150 ++-- contests/ICPC_LA18/H.cpp | 120 +-- contests/ICPC_LA18/I.cpp | 56 +- contests/ICPC_LA18/L.cpp | 132 +-- contests/ICPC_LA18/M.cpp | 28 +- contests/ICPC_LA19/E.cpp | 28 +- contests/ICPC_LA19/I.cpp | 42 +- contests/ICPC_LA19/K.cpp | 70 +- contests/ICPC_LA19/L.cpp | 76 +- contests/ICPC_LA19/M.cpp | 40 +- contests/SBC14/A.cpp | 10 +- contests/SBC14/B.cpp | 24 +- contests/SBC14/C.cpp | 48 +- contests/SBC14/F.cpp | 60 +- contests/SBC14/G.cpp | 96 +-- contests/SBC14/H.cpp | 30 +- contests/SBC14/I.cpp | 84 +- contests/SBC14/K.cpp | 72 +- contests/SBC15/A.cpp | 62 +- contests/SBC15/B.cpp | 26 +- contests/SBC15/C.cpp | 10 +- contests/SBC15/D.cpp | 108 +-- contests/SBC15/E.cpp | 58 +- contests/SBC15/F.cpp | 36 +- contests/SBC15/J.cpp | 34 +- contests/SBC15/K.cpp | 58 +- contests/SBC16/A.cpp | 42 +- contests/SBC16/H.cpp | 26 +- contests/SBC17/A.cpp | 172 ++-- contests/SBC17/B.cpp | 46 +- contests/SBC17/C.cpp | 42 +- contests/SBC17/D.cpp | 46 +- contests/SBC17/E.cpp | 64 +- contests/SBC17/F.cpp | 20 +- contests/SBC17/G.cpp | 30 +- contests/SBC17/H.cpp | 46 +- contests/SBC17/I.cpp | 46 +- contests/SBC17/J.cpp | 14 +- contests/SBC17/K.cpp | 96 +-- contests/SBC17/L.cpp | 176 ++-- contests/SBC17/M.cpp | 16 +- contests/SBC18/B.cpp | 72 +- contests/SBC18/C.cpp | 102 +-- contests/SBC18/D.cpp | 24 +- contests/SBC18/E.cpp | 38 +- contests/SBC18/F.cpp | 86 +- contests/SBC18/G.cpp | 182 ++-- contests/SBC18/I.cpp | 64 +- contests/SBC18/J.cpp | 52 +- contests/SBC18/L.cpp | 116 +-- contests/SBC19/A.cpp | 88 +- contests/SBC19/B.cpp | 14 +- contests/SBC19/D.cpp | 58 +- contests/SBC19/F.cpp | 136 +-- contests/SBC19/G.cpp | 180 ++-- contests/SBC19/H.cpp | 18 +- contests/SBC19/I.cpp | 108 +-- contests/SBC19/J.cpp | 76 +- contests/SBC19/L.cpp | 10 +- contests/SBC19/M.cpp | 52 +- gen_notebook | 2 +- misc/environment/template.cpp | 17 +- problems/a_simple_task.cpp | 226 ++--- problems/crise_hidrica.cpp | 162 ++-- problems/escalacao.cpp | 126 +-- problems/exponial.cpp | 72 +- problems/trees_partition.cpp | 102 +-- problems/xor_submatrix.cpp | 108 +-- 200 files changed, 8134 insertions(+), 8082 deletions(-) create mode 100644 algorithms/paradigm/dp_divide_and_conquer.cpp diff --git a/README.md b/README.md index 06182a2..34ee963 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,11 @@ -# Implementações de algoritmos e resoluções de problemas +# Implementações de algoritmos -Estudo, treino e consulta para programação competitiva (maratona de programação) -Os algoritmos estão classificados por categorias e todos eles estão listados nas Issues. +Estudo, treino e consulta para programação competitiva (maratona de programação). + +## Requisitos (gen_notebook) +``` +$ sudo apt install texlive-latex-base +$ sudo apt install texlive-latex-recommended +$ sudo apt install texlive-formats-extra +$ sudo apt install texlive-luatex +``` diff --git a/algorithms/geometry/circle.cpp b/algorithms/geometry/circle.cpp index 179a8ba..32f9660 100644 --- a/algorithms/geometry/circle.cpp +++ b/algorithms/geometry/circle.cpp @@ -1,48 +1,48 @@ /// Circle struct Circle { - Point<> c; - double r; + Point<> c; + double r; - Circle(Point<> c, double r) : c(c), r(r) {} + Circle(Point<> c, double r) : c(c), r(r) {} - // Circumcircle - Circle(Point<> a, Point<> b, Point<> c) { - Point<> u((b - a).y, -(b - a).x); - Point<> v((c - a).y, -(c - a).x); - Point<> n = (c - b)*0.5; + // Circumcircle + Circle(Point<> a, Point<> b, Point<> c) { + Point<> u((b - a).y, -(b - a).x); + Point<> v((c - a).y, -(c - a).x); + Point<> n = (c - b)*0.5; - double t = u.cross(n) / v.cross(u); + double t = u.cross(n) / v.cross(u); - this->c = (a + c)*0.5 + v*t; - this->r = dist(this->c, a); - } + this->c = (a + c)*0.5 + v*t; + this->r = dist(this->c, a); + } - // Minimum enclosing circle: O(n) - Circle(vector<Point<>> p) { - random_shuffle(all(p)); - Circle C(p[0], 0.0); + // Minimum enclosing circle: O(n) + Circle(vector<Point<>> p) { + random_shuffle(all(p)); + Circle C(p[0], 0.0); - for (int i = 0; i < p.size(); ++i) { - if (C.contains(p[i])) continue; - C = Circle(p[i], 0.0); + for (int i = 0; i < p.size(); ++i) { + if (C.contains(p[i])) continue; + C = Circle(p[i], 0.0); - for (int j = 0; j < i; ++j) { - if (C.contains(p[j])) continue; - C = Circle((p[j] + p[i])*0.5, 0.5*dist(p[j], p[i])); + for (int j = 0; j < i; ++j) { + if (C.contains(p[j])) continue; + C = Circle((p[j] + p[i])*0.5, 0.5*dist(p[j], p[i])); - for (int k = 0; k < j; ++k) { - if (C.contains(p[k])) continue; - C = Circle(p[j], p[i], p[k]); + for (int k = 0; k < j; ++k) { + if (C.contains(p[k])) continue; + C = Circle(p[j], p[i], p[k]); + } + } } - } - } - this->c = C.c; - this->r = C.r; - } + this->c = C.c; + this->r = C.r; + } - bool contains(Point<double> p) { - return (dist(c, p) <= r + EPS); - } + bool contains(Point<> p) { + return (dist(c, p) <= r + EPS); + } }; diff --git a/algorithms/geometry/convex_hull.cpp b/algorithms/geometry/convex_hull.cpp index 279e717..7004ce8 100644 --- a/algorithms/geometry/convex_hull.cpp +++ b/algorithms/geometry/convex_hull.cpp @@ -3,28 +3,30 @@ /// Time: O(n log n) /// Space: O(n) -bool cw(Point<> a, Point<> b, Point<> c) { - return (b - a).cross(c - a) <= 0; +template <typename T> +bool cw(Point<T> a, Point<T> b, Point<T> c) { + return (b - a).cross(c - a) <= 0; } -vector<Point<>> convex_hull(vector<Point<>> &v) { - int k = 0; - vector<Point<>> ans(v.size() * 2); +template <typename T> +vector<Point<T>> convex_hull(vector<Point<T>> &v) { + int k = 0; + vector<Point<T>> ans(v.size() * 2); - sort(all(v), [](const Point<> &a, const Point<> &b) { - return (a.x == b.x) ? (a.y < b.y) : (a.x < b.x); - }); + sort(all(v), [](const Point<T> &a, const Point<T> &b) { + return (a.x == b.x) ? (a.y < b.y) : (a.x < b.x); + }); - for (int i = 0; i < v.size(); ++i) { - for (; k >= 2 && cw(ans[k-2], ans[k-1], v[i]); --k); - ans[k++] = v[i]; - } + for (int i = 0; i < v.size(); ++i) { + for (; k >= 2 && cw(ans[k-2], ans[k-1], v[i]); --k); + ans[k++] = v[i]; + } - for (int i = v.size() - 2, t = k + 1; i >= 0; --i) { - for (; k >= t && cw(ans[k-2], ans[k-1], v[i]); --k); - ans[k++] = v[i]; - } + for (int i = v.size() - 2, t = k + 1; i >= 0; --i) { + for (; k >= t && cw(ans[k-2], ans[k-1], v[i]); --k); + ans[k++] = v[i]; + } - ans.resize(k); - return ans; + ans.resize(k); + return ans; } diff --git a/algorithms/geometry/point.cpp b/algorithms/geometry/point.cpp index a3f66ab..24db5b9 100644 --- a/algorithms/geometry/point.cpp +++ b/algorithms/geometry/point.cpp @@ -2,49 +2,49 @@ template <typename T = double> struct Point { - T x, y; - - Point() {} - Point(T x, T y) : x(x), y(y) {} - - Point operator+(Point p) { return Point(x+p.x, y+p.y); } - Point operator-(Point p) { return Point(x-p.x, y-p.y); } - Point operator*(T s) { return Point(x*s, y*s); } - - T dot(Point p) { return (x*p.x) + (y*p.y); } - T cross(Point p) { return (x*p.y) - (y*p.x); } - - // Returns angle between this and p: - // atan2(y, x) is in the range [-180,180]. To - // get [0, 360], atan2(-y, -x) + 180 is used - T angle(Point p) { - return to_deg(atan2(-cross(p), -dot(p))) + 180.0; - } - - // Returns cosine value between this and p. - T cosine(Point p) { - return (dot(p) / (sqrt(dot(*this))*sqrt(p.dot(p)))); - } - - // Returns sine value between this and p. - T sine(Point p) { - return (cross(p) / (sqrt(dot(*this))*sqrt(p.dot(p)))); - } - - // Returns whether point is inside the triable - // abc or not. - bool inside_triagle(Point a, Point b, Point c) { - bool c1 = (*this - b).cross(a - b) < 0; - bool c2 = (*this - c).cross(b - c) < 0; - bool c3 = (*this - a).cross(c - a) < 0; - return c1 == c2 && c1 == c3; - } - - // Finds orientation of ordered triplet (a,b,c). - // Colinear (0), Clockwise (1), Counterclockwise (2) - static int orientation(Point<> a, Point<> b, Point<> c) { - T val = (b - a).cross(c - b); - if (val == 0) return 0; - return (val > 0) ? 1 : 2; - } + T x, y; + + Point() {} + Point(T x, T y) : x(x), y(y) {} + + Point operator+(Point p) { return Point(x+p.x, y+p.y); } + Point operator-(Point p) { return Point(x-p.x, y-p.y); } + Point operator*(T s) { return Point(x*s, y*s); } + + T dot(Point p) { return (x*p.x) + (y*p.y); } + T cross(Point p) { return (x*p.y) - (y*p.x); } + + // Returns angle between this and p: + // atan2(y, x) is in the range [-180,180]. To + // get [0, 360], atan2(-y, -x) + 180 is used + T angle(Point p) { + return to_deg(atan2(-cross(p), -dot(p))) + 180.0; + } + + // Returns cosine value between this and p. + T cosine(Point p) { + return (dot(p) / (sqrt(dot(*this))*sqrt(p.dot(p)))); + } + + // Returns sine value between this and p. + T sine(Point p) { + return (cross(p) / (sqrt(dot(*this))*sqrt(p.dot(p)))); + } + + // Returns whether point is inside the triable + // abc or not. + bool inside_triagle(Point a, Point b, Point c) { + bool c1 = (*this - b).cross(a - b) < 0; + bool c2 = (*this - c).cross(b - c) < 0; + bool c3 = (*this - a).cross(c - a) < 0; + return c1 == c2 && c1 == c3; + } + + // Finds orientation of ordered triplet (a,b,c). + // Colinear (0), Clockwise (1), Counterclockwise (2) + static int orientation(Point a, Point b, Point c) { + T val = (b - a).cross(c - b); + if (val == 0) return 0; + return (val > 0) ? 1 : 2; + } }; diff --git a/algorithms/geometry/polygon.cpp b/algorithms/geometry/polygon.cpp index 97db8be..2fb010a 100644 --- a/algorithms/geometry/polygon.cpp +++ b/algorithms/geometry/polygon.cpp @@ -2,64 +2,64 @@ template <typename T = double> struct Polygon { - vector<Point<T>> v; + vector<Point<T>> v; - Polygon() {} - Polygon(vector<Point<T>> v) : v(v) {} + Polygon() {} + Polygon(vector<Point<T>> v) : v(v) {} - // Adds a vertex to the polygon. - void add_point(Point<T> p) { v.pb(p); } + // Adds a vertex to the polygon. + void add_point(Point<T> p) { v.pb(p); } - // Returns area of polygon (only works when vertices - // are sorted in clockwise or counterclockwise order). - double area() { - double ans = 0; - for (int i = 0; i < v.size(); ++i) - ans += v[i].cross(v[(i + 1) % v.size()]); + // Returns area of polygon (only works when vertices + // are sorted in clockwise or counterclockwise order). + double area() { + double ans = 0; + for (int i = 0; i < v.size(); ++i) + ans += v[i].cross(v[(i + 1) % v.size()]); - return fabs(ans) / 2.0; - } + return fabs(ans) / 2.0; + } + + // Rotating Calipers + double width() { + vector<Point<T>> h = convex_hull(v); - // Rotating Calipers - double width() { - vector<Point<>> h = convex_hull(v); + int n = h.size() - 1; + double ans = 1e14; - int n = h.size() - 1; - double ans = 1e14; + h[0] = h[n]; + for (int i = 1, j = 1; i <= n; ++i) { + while ((h[i] - h[i-1]).cross(h[j%n+1] - h[i-1]) > + (h[i] - h[i-1]).cross(h[j] - h[i-1])) + j = j % n + 1; - h[0] = h[n]; - for (int i = 1, j = 1; i <= n; ++i) { - while ((h[i] - h[i-1]).cross(h[j%n+1] - h[i-1]) > - (h[i] - h[i-1]).cross(h[j] - h[i-1])) - j = j % n + 1; + Segment<T> seg(h[i], h[i-1]); + ans = min(ans, seg.dist(h[j])); + } - Segment<> seg(h[i], h[i-1]); - ans = min(ans, seg.dist(h[j])); + return ans; } - return ans; - } + // Rotating Calipers + double diameter() { + vector<Point<T>> h = convex_hull(v); - // Rotating Calipers - double diameter() { - vector<Point<>> h = convex_hull(v); + if (h.size() == 1) return 0; + if (h.size() == 2) return dist(h[0], h[1]); - if (h.size() == 1) return 0; - if (h.size() == 2) return dist(h[0], h[1]); + int n = h.size() - 1; + double ans = -1e14; - int n = h.size() - 1; - double ans = -1e14; + h[0] = h[n]; + for (int i = 1, j = 1; i <= n; ++i) { + while ((h[i] - h[i-1]).cross(h[j%n+1] - h[i-1]) > + (h[i] - h[i-1]).cross(h[j] - h[i-1])) + j = j % n + 1; - h[0] = h[n]; - for (int i = 1, j = 1; i <= n; ++i) { - while ((h[i] - h[i-1]).cross(h[j%n+1] - h[i-1]) > - (h[i] - h[i-1]).cross(h[j] - h[i-1])) - j = j % n + 1; + ans = max(ans, dist(h[j], h[i])); + ans = max(ans, dist(h[j], h[i-1])); + } - ans = max(ans, dist(h[j], h[i])); - ans = max(ans, dist(h[j], h[i-1])); + return ans; } - - return ans; - } }; diff --git a/algorithms/geometry/primitives.cpp b/algorithms/geometry/primitives.cpp index 51cee51..e866103 100644 --- a/algorithms/geometry/primitives.cpp +++ b/algorithms/geometry/primitives.cpp @@ -3,6 +3,7 @@ #define to_deg(x) ((x * 180.0) / M_PI) #define to_rad(x) ((x * M_PI) / 180.0) -double dist(Point<> a, Point<> b) { - return hypot(a.x - b.x, a.y - b.y); +template <typename T> +double dist(Point<T> a, Point<T> b) { + return hypot(a.x - b.x, a.y - b.y); } diff --git a/algorithms/geometry/segment.cpp b/algorithms/geometry/segment.cpp index aaf4d97..e2afca4 100644 --- a/algorithms/geometry/segment.cpp +++ b/algorithms/geometry/segment.cpp @@ -2,47 +2,47 @@ template <typename T = double> struct Segment { - Point<T> a, b; - - Segment(Point<T> a, Point<T> b) : a(a), b(b) {} - - // Checks if points p and q are on the same side - // of the segment. - bool same_side(Point<T> p, Point<T> q) { - T cpp = (p - a).cross(b - a); - T cpq = (q - a).cross(b - a); - return ((cpp > 0 && cpq > 0) || - (cpp < 0 && cpq < 0)); - } - - // Checks if point p is on the segment. - bool on_segment(Point<T> p) { - return (p.x <= max(a.x, b.x) && - p.x >= min(a.x, b.x) && - p.y <= max(a.y, b.y) && - p.y >= min(a.y, b.y)); - } - - // Distance between segment and point - double dist(Point<T> p) { - return (a - b).cross(p - b)/sqrt((b - a).dot(b - a)); - } - - // Checks if segment intersects with s. - bool intersect(Segment<T> s) { - int o1 = Point<>::orientation( a, b, s.a); - int o2 = Point<>::orientation( a, b, s.b); - int o3 = Point<>::orientation(s.a, s.b, a); - int o4 = Point<>::orientation(s.a, s.b, b); - - if (o1 != o2 && o3 != o4) - return true; - - if (o1 == 0 && on_segment(s.a)) return true; - if (o2 == 0 && on_segment(s.b)) return true; - if (o3 == 0 && s.on_segment(a)) return true; - if (o4 == 0 && s.on_segment(b)) return true; - - return false; - } + Point<T> a, b; + + Segment(Point<T> a, Point<T> b) : a(a), b(b) {} + + // Checks if points p and q are on the same side + // of the segment. + bool same_side(Point<T> p, Point<T> q) { + T cpp = (p - a).cross(b - a); + T cpq = (q - a).cross(b - a); + return ((cpp > 0 && cpq > 0) || + (cpp < 0 && cpq < 0)); + } + + // Checks if point p is on the segment. + bool on_segment(Point<T> p) { + return (p.x <= max(a.x, b.x) && + p.x >= min(a.x, b.x) && + p.y <= max(a.y, b.y) && + p.y >= min(a.y, b.y)); + } + + // Distance between segment and point + double dist(Point<T> p) { + return (a - b).cross(p - b)/sqrt((b - a).dot(b - a)); + } + + // Checks if segment intersects with s. + bool intersect(Segment<T> s) { + int o1 = Point<T>::orientation( a, b, s.a); + int o2 = Point<T>::orientation( a, b, s.b); + int o3 = Point<T>::orientation(s.a, s.b, a); + int o4 = Point<T>::orientation(s.a, s.b, b); + + if (o1 != o2 && o3 != o4) + return true; + + if (o1 == 0 && on_segment(s.a)) return true; + if (o2 == 0 && on_segment(s.b)) return true; + if (o3 == 0 && s.on_segment(a)) return true; + if (o4 == 0 && s.on_segment(b)) return true; + + return false; + } }; diff --git a/algorithms/graph/articulations_bridges.cpp b/algorithms/graph/articulations_bridges.cpp index 7616b54..dee78c3 100644 --- a/algorithms/graph/articulations_bridges.cpp +++ b/algorithms/graph/articulations_bridges.cpp @@ -6,53 +6,54 @@ vector<int> graph[MAX]; struct ArticulationsBridges { - int N; - vector<int> vis, par, L, low; + int N; + vector<int> vis, par, L, low; - vector<ii> brid; - vector<int> arti; + vector<p<int>> brid; + vector<int> arti; - ArticulationsBridges(int N) : - N(N), vis(N), par(N), L(N), low(N) - { init(); } + ArticulationsBridges(int N) : + N(N), vis(N), + par(N), L(N), low(N) + { init(); } - void init() { - fill(all(L), 0); - fill(all(vis), 0); - fill(all(par), -1); - } + void init() { + fill(all(L), 0); + fill(all(vis), 0); + fill(all(par), -1); + } - void dfs(int x) { - int child = 0; - vis[x] = 1; + void dfs(int x) { + int child = 0; + vis[x] = 1; - for (auto i : graph[x]) { - if (!vis[i]) { - child++; - par[i] = x; + for (auto i : graph[x]) { + if (!vis[i]) { + child++; + par[i] = x; - low[i] = L[i] = L[x] + 1; - dfs(i); - low[x] = min(low[x], low[i]); + low[i] = L[i] = L[x] + 1; + dfs(i); + low[x] = min(low[x], low[i]); - if ((par[x] == -1 && child > 1) || - (par[x] != -1 && low[i] >= L[x])) - arti.pb(x); + if ((par[x] == -1 && child > 1) || + (par[x] != -1 && low[i] >= L[x])) + arti.pb(x); - if (low[i] > L[x]) - brid.pb(ii(x, i)); + if (low[i] > L[x]) + brid.pb(p<int>(x, i)); - } else if (par[x] != i) - low[x] = min(low[x], L[i]); + } else if (par[x] != i) + low[x] = min(low[x], L[i]); + } } - } - void run() { - for (int i = 0; i < N; ++i) - if (!vis[i]) - dfs(i); + void run() { + for (int i = 0; i < N; ++i) + if (!vis[i]) + dfs(i); - sort(all(arti)); - arti.erase(unique(all(arti)), arti.end()); - } + sort(all(arti)); + arti.erase(unique(all(arti)), arti.end()); + } }; diff --git a/algorithms/graph/bellman_ford.cpp b/algorithms/graph/bellman_ford.cpp index 3a5b959..291a8db 100644 --- a/algorithms/graph/bellman_ford.cpp +++ b/algorithms/graph/bellman_ford.cpp @@ -6,39 +6,39 @@ /// Status: Tested (LA4509) struct BellmanFord { - struct Edge { int u, v, w; }; - - int N; - vector<int> dist; - vector<Edge> graph; - - BellmanFord(int N) : - N(N), dist(N) - { init(); } - - void init() { - fill(all(dist), inf); - } - - void add_edge(int u, int v, int w) { - graph.pb({ u, v, w }); - } - - int run(int s, int d) { - dist[s] = 0; - for (int i = 0; i < N; ++i) - for (auto e : graph) - if (dist[e.u] != inf && - dist[e.u] + e.w < dist[e.v]) - dist[e.v] = dist[e.u] + e.w; - - // Check for negative cycles, return -inf if - // there is one - for (auto e : graph) - if (dist[e.u] != inf && - dist[e.u] + e.w < dist[e.v]) - return -inf; - - return dist[d]; - } + struct Edge { int u, v, w; }; + + int N; + vector<int> dist; + vector<Edge> graph; + + BellmanFord(int N) : + N(N), dist(N) + { init(); } + + void init() { + fill(all(dist), inf); + } + + void add_edge(int u, int v, int w) { + graph.pb({ u, v, w }); + } + + int run(int s, int d) { + dist[s] = 0; + for (int i = 0; i < N; ++i) + for (auto e : graph) + if (dist[e.u] != inf && + dist[e.u] + e.w < dist[e.v]) + dist[e.v] = dist[e.u] + e.w; + + // Check for negative cycles, return -inf if + // there is one + for (auto e : graph) + if (dist[e.u] != inf && + dist[e.u] + e.w < dist[e.v]) + return -inf; + + return dist[d]; + } }; diff --git a/algorithms/graph/bipartite_match.cpp b/algorithms/graph/bipartite_match.cpp index b29a9c8..5a55436 100644 --- a/algorithms/graph/bipartite_match.cpp +++ b/algorithms/graph/bipartite_match.cpp @@ -6,35 +6,35 @@ vector<int> graph[MAX]; struct BipartiteMatching { - int N; - vector<int> vis, match; - - BipartiteMatching(int N) : - N(N), vis(N), match(N) - { init(); } - - void init() { - fill(all(vis), 0); - fill(all(match), -1); - } - - int dfs(int x) { - if (vis[x]) return 0; - - vis[x] = 1; - for (auto i : graph[x]) - if (match[i] == -1 || dfs(match[i])) { - match[i] = x; - return 1; - } - - return 0; - } - - int run() { - int ans = 0; - for (int i = 0; i < N; ++i) - ans += dfs(i); - return ans; - } + int N; + vector<int> vis, match; + + BipartiteMatching(int N) : + N(N), vis(N), match(N) + { init(); } + + void init() { + fill(all(vis), 0); + fill(all(match), -1); + } + + int dfs(int x) { + if (vis[x]) return 0; + + vis[x] = 1; + for (auto i : graph[x]) + if (match[i] == -1 || dfs(match[i])) { + match[i] = x; + return 1; + } + + return 0; + } + + int run() { + int ans = 0; + for (int i = 0; i < N; ++i) + ans += dfs(i); + return ans; + } }; diff --git a/algorithms/graph/centroid_decomposition.cpp b/algorithms/graph/centroid_decomposition.cpp index 4701e86..5384432 100644 --- a/algorithms/graph/centroid_decomposition.cpp +++ b/algorithms/graph/centroid_decomposition.cpp @@ -18,43 +18,43 @@ vector<int> graph[MAX]; struct CentroidDecomposition { - vector<int> par, size, vis; - - CentroidDecomposition(int N) : - par(N), size(N), vis(N) - { init(); } - - void init() { - fill(all(vis), 0); - build(0); // 0-indexed vertices - } - - void build(int x, int p = -1) { - int n = dfs(x); - int c = get_centroid(x, n); - vis[c] = 1; - par[c] = p; - - for (auto i : graph[c]) - if (!vis[i]) - build(i, c); - } - - // Calculates size of every subtree. - int dfs(int x, int p = -1) { - size[x] = 1; - for (auto i : graph[x]) - if (i != p && !vis[i]) - size[x] += dfs(i, x); - return size[x]; - } - - int get_centroid(int x, int n, int p = -1) { - for (auto i : graph[x]) - if (i != p && size[i] > n / 2 && !vis[i]) - return get_centroid(i, n, x); - return x; - } - - int operator[](int i) { return par[i]; } + vector<int> par, size, vis; + + CentroidDecomposition(int N) : + par(N), size(N), vis(N) + { init(); } + + void init() { + fill(all(vis), 0); + build(0); // 0-indexed vertices + } + + void build(int x, int p = -1) { + int n = dfs(x); + int c = get_centroid(x, n); + vis[c] = 1; + par[c] = p; + + for (auto i : graph[c]) + if (!vis[i]) + build(i, c); + } + + // Calculates size of every subtree. + int dfs(int x, int p = -1) { + size[x] = 1; + for (auto i : graph[x]) + if (i != p && !vis[i]) + size[x] += dfs(i, x); + return size[x]; + } + + int get_centroid(int x, int n, int p = -1) { + for (auto i : graph[x]) + if (i != p && size[i] > n / 2 && !vis[i]) + return get_centroid(i, n, x); + return x; + } + + int operator[](int i) { return par[i]; } }; diff --git a/algorithms/graph/dijkstra.cpp b/algorithms/graph/dijkstra.cpp index ba7ec06..be02879 100644 --- a/algorithms/graph/dijkstra.cpp +++ b/algorithms/graph/dijkstra.cpp @@ -12,38 +12,38 @@ vector<int> graph[MAX]; struct Dijkstra { - int N; - vector<int> dist, vis; - - Dijkstra(int N) : - N(N), dist(N), vis(N) - { init(); } - - void init() { - fill(all(vis), 0); - fill(all(dist), inf); - } - - int run(int s, int d) { - set<ii> pq; - dist[s] = 0; - pq.insert(ii(0, s)); - - while (pq.size() != 0) { - int u = pq.begin()->se; - pq.erase(pq.begin()); - - if (vis[u]) continue; - vis[u] = 1; - - for (auto i : graph[u]) { - if (!vis[i.fi] && dist[i.fi] > dist[u] + i.se) { - dist[i.fi] = dist[u] + i.se; - pq.insert(ii(dist[i.fi], i.fi)); - } - } + int N; + vector<int> dist, vis; + + Dijkstra(int N) : + N(N), dist(N), vis(N) + { init(); } + + void init() { + fill(all(vis), 0); + fill(all(dist), inf); } - return dist[d]; - } + int run(int s, int d) { + set<p<int>> pq; + dist[s] = 0; + pq.insert({0, s}); + + while (pq.size() != 0) { + int u = pq.begin()->se; + pq.erase(pq.begin()); + + if (vis[u]) continue; + vis[u] = 1; + + for (auto i : graph[u]) { + if (!vis[i.fi] && dist[i.fi] > dist[u] + i.se) { + dist[i.fi] = dist[u] + i.se; + pq.insert({dist[i.fi], i.fi}); + } + } + } + + return dist[d]; + } }; diff --git a/algorithms/graph/dinic.cpp b/algorithms/graph/dinic.cpp index f45e94f..3407114 100644 --- a/algorithms/graph/dinic.cpp +++ b/algorithms/graph/dinic.cpp @@ -6,66 +6,66 @@ /// Status: Tested (URI2882,URI2354) struct Dinic { - struct Edge { int u, f, c, r; }; + struct Edge { int u, f, c, r; }; - int N; - vector<int> depth, start; - vector<vector<Edge>> graph; + int N; + vector<int> depth, start; + vector<vector<Edge>> graph; - Dinic(int N) : - N(N), depth(N), - start(N), graph(N) - {} + Dinic(int N) : + N(N), depth(N), + start(N), graph(N) + {} - void add_edge(int u, int v, int c) { - Edge forw = { v, 0, c, (int) graph[v].size() }; - Edge back = { u, 0, 0, (int) graph[u].size() }; - graph[u].pb(forw); - graph[v].pb(back); - } + void add_edge(int u, int v, int c) { + Edge forw = { v, 0, c, (int) graph[v].size() }; + Edge back = { u, 0, 0, (int) graph[u].size() }; + graph[u].pb(forw); + graph[v].pb(back); + } - bool bfs(int s, int t) { - queue<int> Q; - Q.push(s); + bool bfs(int s, int t) { + queue<int> Q; + Q.push(s); - fill(all(depth), -1); - depth[s] = 0; + fill(all(depth), -1); + depth[s] = 0; - while (!Q.empty()) { - int v = Q.front(); Q.pop(); - for (auto i : graph[v]) - if (depth[i.u] == -1 && i.f < i.c) { - depth[i.u] = depth[v] + 1; - Q.push(i.u); + while (!Q.empty()) { + int v = Q.front(); Q.pop(); + for (auto i : graph[v]) + if (depth[i.u] == -1 && i.f < i.c) { + depth[i.u] = depth[v] + 1; + Q.push(i.u); + } } + return depth[t] != -1; } - return depth[t] != -1; - } - int dfs(int s, int t, int f) { - if (s == t) return f; + int dfs(int s, int t, int f) { + if (s == t) return f; - for ( ; start[s] < graph[s].size(); ++start[s]) { - Edge &e = graph[s][start[s]]; - if (depth[e.u] == depth[s] + 1 && e.f < e.c) { - int min_f = dfs(e.u, t, min(f, e.c - e.f)); - if (min_f > 0) { - e.f += min_f; - graph[e.u][e.r].f -= min_f; - return min_f; + for ( ; start[s] < graph[s].size(); ++start[s]) { + Edge &e = graph[s][start[s]]; + if (depth[e.u] == depth[s] + 1 && e.f < e.c) { + int min_f = dfs(e.u, t, min(f, e.c - e.f)); + if (min_f > 0) { + e.f += min_f; + graph[e.u][e.r].f -= min_f; + return min_f; + } + } } - } + return 0; } - return 0; - } - int run(int s, int t) { - int ans = 0; - while (bfs(s, t)) { - fill(all(start), 0); - while (int flow = dfs(s, t, inf)) - ans += flow; + int run(int s, int t) { + int ans = 0; + while (bfs(s, t)) { + fill(all(start), 0); + while (int flow = dfs(s, t, inf)) + ans += flow; + } + return ans; } - return ans; - } }; diff --git a/algorithms/graph/edmonds_karp.cpp b/algorithms/graph/edmonds_karp.cpp index f8e628e..d603f2f 100644 --- a/algorithms/graph/edmonds_karp.cpp +++ b/algorithms/graph/edmonds_karp.cpp @@ -9,52 +9,52 @@ int rg[MAX][MAX]; int graph[MAX][MAX]; struct EdmondsKarp { - int N; - vector<int> par, vis; - - EdmondsKarp(int N) : - N(N), par(N), vis(N) - { init(); } - - void init() { - fill(all(vis), 0); - } - - bool bfs(int s, int t) { - queue<int> Q; - Q.push(s); - vis[s] = true; - - while (!Q.empty()) { - int u = Q.front(); Q.pop(); - if (u == t) return true; - for (int i = 0; i < N; ++i) - if (!vis[i] && rg[u][i]) { - vis[i] = true; - par[i] = u; - Q.push(i); + int N; + vector<int> par, vis; + + EdmondsKarp(int N) : + N(N), par(N), vis(N) + { init(); } + + void init() { + fill(all(vis), 0); + } + + bool bfs(int s, int t) { + queue<int> Q; + Q.push(s); + vis[s] = true; + + while (!Q.empty()) { + int u = Q.front(); Q.pop(); + if (u == t) return true; + for (int i = 0; i < N; ++i) + if (!vis[i] && rg[u][i]) { + vis[i] = true; + par[i] = u; + Q.push(i); + } } + return false; } - return false; - } - - int run(int s, int t) { - int ans = 0; - par[s] = -1; - memcpy(rg, graph, sizeof(graph)); - - while (bfs(s, t)) { - int flow = inf; - for (int i = t; par[i] != -1; i = par[i]) - flow = min(flow, rg[par[i]][i]); - - for (int i = t; par[i] != -1; i = par[i]) { - rg[par[i]][i] -= flow; - rg[i][par[i]] += flow; - } - ans += flow; - init(); + + int run(int s, int t) { + int ans = 0; + par[s] = -1; + memcpy(rg, graph, sizeof(graph)); + + while (bfs(s, t)) { + int flow = inf; + for (int i = t; par[i] != -1; i = par[i]) + flow = min(flow, rg[par[i]][i]); + + for (int i = t; par[i] != -1; i = par[i]) { + rg[par[i]][i] -= flow; + rg[i][par[i]] += flow; + } + ans += flow; + init(); + } + return ans; } - return ans; - } }; diff --git a/algorithms/graph/floyd_warshall.cpp b/algorithms/graph/floyd_warshall.cpp index d52f5bc..4d97c04 100644 --- a/algorithms/graph/floyd_warshall.cpp +++ b/algorithms/graph/floyd_warshall.cpp @@ -7,16 +7,16 @@ int dist[MAX][MAX]; int graph[MAX][MAX]; void floyd_warshall(int n) { - mset(dist, inf); + mset(dist, inf); - for (int i = 0; i < n; ++i) - for (int j = 0; j < n; ++j) - if (graph[i][j]) - dist[i][j] = graph[i][j]; - - for (int k = 0; k < n; ++k) for (int i = 0; i < n; ++i) - for (int j = 0; j < n; ++j) - dist[i][j] = min(dist[i][j], - dist[i][k] + dist[k][j]); + for (int j = 0; j < n; ++j) + if (graph[i][j]) + dist[i][j] = graph[i][j]; + + for (int k = 0; k < n; ++k) + for (int i = 0; i < n; ++i) + for (int j = 0; j < n; ++j) + dist[i][j] = min(dist[i][j], + dist[i][k] + dist[k][j]); } diff --git a/algorithms/graph/ford_fulkerson.cpp b/algorithms/graph/ford_fulkerson.cpp index fb7a77f..28a3cb1 100644 --- a/algorithms/graph/ford_fulkerson.cpp +++ b/algorithms/graph/ford_fulkerson.cpp @@ -9,46 +9,46 @@ int rg[MAX][MAX]; int graph[MAX][MAX]; struct FordFulkerson { - int N; - vector<int> par, vis; - - FordFulkerson(int N) : - N(N), par(N), vis(N) - { init(); } - - void init() { - fill(all(vis), 0); - } - - bool dfs(int s, int t) { - vis[s] = true; - if (s == t) return true; - - for (int i = 0; i < N; ++i) - if (!vis[i] && rg[s][i]) { - par[i] = s; - if (dfs(i, t)) return true; - } - return false; - } - - int run(int s, int t) { - int ans = 0; - par[s] = -1; - memcpy(rg, graph, sizeof(graph)); - - while (dfs(s, t)) { - int flow = inf; - for (int i = t; par[i] != -1; i = par[i]) - flow = min(flow, rg[par[i]][i]); - - for (int i = t; par[i] != -1; i = par[i]) { - rg[par[i]][i] -= flow; - rg[i][par[i]] += flow; - } - ans += flow; - init(); + int N; + vector<int> par, vis; + + FordFulkerson(int N) : + N(N), par(N), vis(N) + { init(); } + + void init() { + fill(all(vis), 0); + } + + bool dfs(int s, int t) { + vis[s] = true; + if (s == t) return true; + + for (int i = 0; i < N; ++i) + if (!vis[i] && rg[s][i]) { + par[i] = s; + if (dfs(i, t)) return true; + } + return false; + } + + int run(int s, int t) { + int ans = 0; + par[s] = -1; + memcpy(rg, graph, sizeof(graph)); + + while (dfs(s, t)) { + int flow = inf; + for (int i = t; par[i] != -1; i = par[i]) + flow = min(flow, rg[par[i]][i]); + + for (int i = t; par[i] != -1; i = par[i]) { + rg[par[i]][i] -= flow; + rg[i][par[i]] += flow; + } + ans += flow; + init(); + } + return ans; } - return ans; - } }; diff --git a/algorithms/graph/hld.cpp b/algorithms/graph/hld.cpp index d8fe426..7d7b658 100644 --- a/algorithms/graph/hld.cpp +++ b/algorithms/graph/hld.cpp @@ -23,92 +23,92 @@ /// /// Status: Tested (QTREE,URI2887) -ii edge[MAX]; -vector<ii> graph[MAX]; - +p<int> edge[MAX]; +vector<p<int>> graph[MAX]; + template <typename ST> struct HLD { - ST &seg; - int cnum, ptr; - - // depth, parent, value of node - vector<int> dep, par, val; - - // head[i]: head of i-th node's chain; - // heavy[i]: "special child" of i-th node - // pos[i]: position of i-th node on segtree - // bot[i]: bottommost (depth-wise) node on the i-th - // edge (required only when edges have weights) - vector<int> head, heavy, pos, bot; - - HLD(int n, ST &seg) : - seg(seg), - dep(n, 0), par(n), val(n), - head(n), heavy(n, -1), pos(n), bot(n) - { - cnum = ptr = 0; - N = n; // global N for segtree - dfs(0); - decompose(0); - - // (required only when edges have weights) - for (int i = 0; i < n - 1; ++i) - if (dep[edge[i].fi] > dep[edge[i].se]) - bot[i] = edge[i].fi; - else - bot[i] = edge[i].se; - } - - int dfs(int x, int p = -1) { - int size = 1; - par[x] = p; - - int max_size = 0; - for (auto i : graph[x]) - if (i.fi != p) { - dep[i.fi] = dep[x] + 1; - val[i.fi] = i.se; - int isize = dfs(i.fi, x); - - size += isize; - if (isize > max_size) - max_size = isize, heavy[x] = i.fi; - } - - return size; - } - - void decompose(int x, int h = 0) { - head[x] = h; - seg.update(ptr, val[x]); - pos[x] = ptr++; - - if (heavy[x] != -1) - decompose(heavy[x], h); - - for (auto i : graph[x]) - if (i.fi != par[x] && i.fi != heavy[x]) - decompose(i.fi, i.fi); - } - - // Queries max edge (or vertice) on the path - // between a and b - int query(int a, int b) { - int ans = seg.ident; - for (; head[a] != head[b]; b = par[head[b]]) { - if (dep[head[a]] > dep[head[b]]) - swap(a, b); - ans = seg.func(ans, seg.query(pos[head[b]], pos[b])); + ST &seg; + int cnum, ptr; + + // depth, parent, value of node + vector<int> dep, par, val; + + // head[i]: head of i-th node's chain; + // heavy[i]: "special child" of i-th node + // pos[i]: position of i-th node on segtree + // bot[i]: bottommost (depth-wise) node on the i-th + // edge (required only when edges have weights) + vector<int> head, heavy, pos, bot; + + HLD(int n, ST &seg) : + seg(seg), + dep(n, 0), par(n), val(n), + head(n), heavy(n, -1), pos(n), bot(n) + { + cnum = ptr = 0; + N = n; // global N for segtree + dfs(0); + decompose(0); + + // (required only when edges have weights) + for (int i = 0; i < n - 1; ++i) + if (dep[edge[i].fi] > dep[edge[i].se]) + bot[i] = edge[i].fi; + else + bot[i] = edge[i].se; + } + + int dfs(int x, int p = -1) { + int size = 1; + par[x] = p; + + int max_size = 0; + for (auto i : graph[x]) + if (i.fi != p) { + dep[i.fi] = dep[x] + 1; + val[i.fi] = i.se; + int isize = dfs(i.fi, x); + + size += isize; + if (isize > max_size) + max_size = isize, heavy[x] = i.fi; + } + + return size; + } + + void decompose(int x, int h = 0) { + head[x] = h; + seg.update(ptr, val[x]); + pos[x] = ptr++; + + if (heavy[x] != -1) + decompose(heavy[x], h); + + for (auto i : graph[x]) + if (i.fi != par[x] && i.fi != heavy[x]) + decompose(i.fi, i.fi); } - if (dep[a] > dep[b]) swap(a, b); + // Queries max edge (or vertice) on the path + // between a and b + int query(int a, int b) { + int ans = seg.ident; + for (; head[a] != head[b]; b = par[head[b]]) { + if (dep[head[a]] > dep[head[b]]) + swap(a, b); + ans = seg.func(ans, seg.query(pos[head[b]], pos[b])); + } - // Remove "+ 1" when values are associated with vertices - return seg.func(ans, seg.query(pos[a] + 1, pos[b])); - } - - // Updates value of i-th edge (or vertice) - void update(int i, int val) { - seg.update(pos[bot[i]], val); - } + if (dep[a] > dep[b]) swap(a, b); + + // Remove "+ 1" when values are associated with vertices + return seg.func(ans, seg.query(pos[a] + 1, pos[b])); + } + + // Updates value of i-th edge (or vertice) + void update(int i, int val) { + seg.update(pos[bot[i]], val); + } }; diff --git a/algorithms/graph/hopcroft_karp.cpp b/algorithms/graph/hopcroft_karp.cpp index 1897db3..fa10632 100644 --- a/algorithms/graph/hopcroft_karp.cpp +++ b/algorithms/graph/hopcroft_karp.cpp @@ -3,7 +3,7 @@ /// Time: O(E * sqrt{V}) /// Space: O(V + E) /// -/// Caution: +/// Caution: /// - Assumes 0-indexed vertices in graph; /// - The vertex enumeration on the left CAN be the same as the right. /// @@ -12,66 +12,67 @@ vector<int> graph[MAX]; struct HopcroftKarp { - int L, R; - vector<int> dist; - vector<int> matchL, matchR; + int L, R; + vector<int> dist; + vector<int> matchL, matchR; - HopcroftKarp(int L, int R) : - L(L), R(R), dist(L), - matchL(L), matchR(R) - { init(); } + HopcroftKarp(int L, int R) : + L(L), R(R), dist(L), + matchL(L), matchR(R) + { init(); } - void init() { - fill(all(matchL), -1); - fill(all(matchR), -1); - } + void init() { + fill(all(matchL), -1); + fill(all(matchR), -1); + } - bool bfs() { - queue<int> Q; - for (int l = 0; l < L; ++l) - if (matchL[l] == -1) { - dist[l] = 0; - Q.push(l); - } else - dist[l] = -1; + bool bfs() { + queue<int> Q; + for (int l = 0; l < L; ++l) + if (matchL[l] == -1) { + dist[l] = 0; + Q.push(l); + } else + dist[l] = -1; - bool ans = false; - while (!Q.empty()) { - int l = Q.front(); Q.pop(); - for (auto r : graph[l]) - if (matchR[r] == -1) - ans = true; - else if (dist[matchR[r]] == -1) { - dist[matchR[r]] = dist[l] + 1; - Q.push(matchR[r]); + bool ans = false; + while (!Q.empty()) { + int l = Q.front(); Q.pop(); + for (auto r : graph[l]) + if (matchR[r] == -1) + ans = true; + else if (dist[matchR[r]] == -1) { + dist[matchR[r]] = dist[l] + 1; + Q.push(matchR[r]); + } } - } - return ans; - } + return ans; + } - bool dfs(int l) { - if (l == -1) - return true; + bool dfs(int l) { + if (l == -1) + return true; - for (auto r : graph[l]) - if (matchR[r] == -1 || dist[matchR[r]] == dist[l] + 1) - if (dfs(matchR[r])) { - matchR[r] = l; - matchL[l] = r; - return true; - } + for (auto r : graph[l]) + if (matchR[r] == -1 || + dist[matchR[r]] == dist[l] + 1) + if (dfs(matchR[r])) { + matchR[r] = l; + matchL[l] = r; + return true; + } - return false; - } + return false; + } - int run() { - int ans = 0; - while (bfs()) - for (int l = 0; l < L; ++l) - if (matchL[l] == -1 && dfs(l)) - ans++; + int run() { + int ans = 0; + while (bfs()) + for (int l = 0; l < L; ++l) + if (matchL[l] == -1 && dfs(l)) + ans++; - return ans; - } + return ans; + } }; diff --git a/algorithms/graph/kosaraju.cpp b/algorithms/graph/kosaraju.cpp index 22a9f83..46af585 100644 --- a/algorithms/graph/kosaraju.cpp +++ b/algorithms/graph/kosaraju.cpp @@ -7,56 +7,56 @@ vector<int> graph[MAX]; vector<int> transp[MAX]; struct Kosaraju { - int N; - stack<int> S; - vector<int> vis; - - Kosaraju(int N) : - N(N), vis(N) - { init(); } - - void init() { - fill(all(vis), 0); - } - - void dfs(int x) { - vis[x] = true; - for (auto i : transp[x]) - if (!vis[i]) - dfs(i); - } - - // Fills stack with DFS starting points to find SCC. - void fill_stack(int x) { - vis[x] = true; - for (auto i : graph[x]) - if (!vis[i]) - fill_stack(i); - S.push(x); - } - - int run() { - int scc = 0; - for (int i = 0; i < N; ++i) - if (!vis[i]) - fill_stack(i); - - // Transpose graph - for (int i = 0; i < N; ++i) - for (auto j : graph[i]) - transp[j].push_back(i); - init(); - - // Count SCC - while (!S.empty()) { - int v = S.top(); - S.pop(); - if (!vis[v]) { - dfs(v); - scc++; - } + int N; + stack<int> S; + vector<int> vis; + + Kosaraju(int N) : + N(N), vis(N) + { init(); } + + void init() { + fill(all(vis), 0); + } + + void dfs(int x) { + vis[x] = true; + for (auto i : transp[x]) + if (!vis[i]) + dfs(i); } - return scc; - } + // Fills stack with DFS starting points to find SCC. + void fill_stack(int x) { + vis[x] = true; + for (auto i : graph[x]) + if (!vis[i]) + fill_stack(i); + S.push(x); + } + + int run() { + int scc = 0; + for (int i = 0; i < N; ++i) + if (!vis[i]) + fill_stack(i); + + // Transpose graph + for (int i = 0; i < N; ++i) + for (auto j : graph[i]) + transp[j].push_back(i); + init(); + + // Count SCC + while (!S.empty()) { + int v = S.top(); + S.pop(); + if (!vis[v]) { + dfs(v); + scc++; + } + } + + return scc; + } }; diff --git a/algorithms/graph/kruskal.cpp b/algorithms/graph/kruskal.cpp index 96580a5..648b123 100644 --- a/algorithms/graph/kruskal.cpp +++ b/algorithms/graph/kruskal.cpp @@ -6,34 +6,34 @@ /// Include: /// - structure/disjoint_set -using edge = pair<ii,int>; +using edge = pair<p<int>,int>; vector<edge> edges; struct Kruskal { - int N; - DisjointSet ds; + int N; + DisjointSet ds; - Kruskal(int N) : N(N), ds(N) {} + Kruskal(int N) : N(N), ds(N) {} - // Minimum Spanning Tree: comp = less<int>() - // Maximum Spanning Tree: comp = greater<int>() - int run(vector<edge> &mst, function<bool(int,int)> comp) { - sort(all(edges), [&](const edge &a, const edge &b) { - return comp(a.se, b.se); - }); + // Minimum Spanning Tree: comp = less<int>() + // Maximum Spanning Tree: comp = greater<int>() + int run(vector<edge> &mst, function<bool(int,int)> comp) { + sort(all(edges), [&](const edge &a, const edge &b) { + return comp(a.se, b.se); + }); - int size = 0; - for (int i = 0; i < edges.size(); i++) { - int pu = ds.find_set(edges[i].fi.fi); - int pv = ds.find_set(edges[i].fi.se); + int size = 0; + for (int i = 0; i < edges.size(); i++) { + int pu = ds.find_set(edges[i].fi.fi); + int pv = ds.find_set(edges[i].fi.se); - if (pu != pv) { - mst.pb(edges[i]); - size += edges[i].se; - ds.union_set(pu, pv); - } - } + if (pu != pv) { + mst.pb(edges[i]); + size += edges[i].se; + ds.union_set(pu, pv); + } + } - return size; - } + return size; + } }; diff --git a/algorithms/graph/lca.cpp b/algorithms/graph/lca.cpp index 0a6311a..25d7f2d 100644 --- a/algorithms/graph/lca.cpp +++ b/algorithms/graph/lca.cpp @@ -20,72 +20,72 @@ #define LOG 20 #define COST 0 -vector<ii> graph[MAX]; +vector<p<int>> graph[MAX]; int par[MAX][LOG], cost[MAX][LOG]; template <typename T, class F = function<T(T,T)>> struct LCA { - F func; - vector<int> h; + F func; + vector<int> h; - LCA(int N, F func) : h(N), func(func) - { init(); } + LCA(int N, F func) : h(N), func(func) + { init(); } - void init() { - mset(par, -1); - mset(cost, 0); - dfs(0); - } + void init() { + mset(par, -1); + mset(cost, 0); + dfs(0); + } - void dfs(int v, int p = -1, int c = 0) { - par[v][0] = p; - cost[v][0] = c; - if (p != -1) h[v] = h[p] + 1; + void dfs(int v, int p = -1, int c = 0) { + par[v][0] = p; + cost[v][0] = c; + if (p != -1) h[v] = h[p] + 1; - for (int i = 1; i < LOG; ++i) - if (par[v][i-1] != -1) { - par[v][i] = par[par[v][i-1]][i-1]; - cost[v][i] = func(cost[v][i], func(cost[v][i-1], - cost[par[v][i-1]][i-1])); - } + for (int i = 1; i < LOG; ++i) + if (par[v][i-1] != -1) { + par[v][i] = par[par[v][i-1]][i-1]; + cost[v][i] = func(cost[v][i], func(cost[v][i-1], + cost[par[v][i-1]][i-1])); + } - for (auto u : graph[v]) - if (p != u.fi) - dfs(u.fi, v, u.se); - } + for (auto u : graph[v]) + if (p != u.fi) + dfs(u.fi, v, u.se); + } - int query(int a, int b) { - int ans = 0; - if (h[a] < h[b]) swap(a, b); + int query(int a, int b) { + int ans = 0; + if (h[a] < h[b]) swap(a, b); - for (int i = LOG - 1; i >= 0; --i) - if (par[a][i] != -1 && h[par[a][i]] >= h[b]) { - ans = func(ans, cost[a][i]); - a = par[a][i]; - } + for (int i = LOG - 1; i >= 0; --i) + if (par[a][i] != -1 && h[par[a][i]] >= h[b]) { + ans = func(ans, cost[a][i]); + a = par[a][i]; + } - if (a == b) { - #ifdef COST - return ans; - #else - return a; - #endif - } + if (a == b) { +#ifdef COST + return ans; +#else + return a; +#endif + } - for (int i = LOG - 1; i >= 0; --i) - if (par[a][i] != -1 && par[a][i] != par[b][i]) { - ans = func(ans, func(cost[a][i], cost[b][i])); - a = par[a][i]; - b = par[b][i]; - } + for (int i = LOG - 1; i >= 0; --i) + if (par[a][i] != -1 && par[a][i] != par[b][i]) { + ans = func(ans, func(cost[a][i], cost[b][i])); + a = par[a][i]; + b = par[b][i]; + } - #ifdef COST - if (a == b) - return ans; - else - return func(ans, func(cost[a][0], cost[b][0])); - #else - return par[a][0]; - #endif - } +#ifdef COST + if (a == b) + return ans; + else + return func(ans, func(cost[a][0], cost[b][0])); +#else + return par[a][0]; +#endif + } }; diff --git a/algorithms/graph/min_cost_max_flow.cpp b/algorithms/graph/min_cost_max_flow.cpp index c8dd2bb..e605db2 100644 --- a/algorithms/graph/min_cost_max_flow.cpp +++ b/algorithms/graph/min_cost_max_flow.cpp @@ -4,73 +4,73 @@ /// Space: O(V + E) /// /// Status: Tested (UVA10594,kattis/mincostmaxflow) - + struct MinCostMaxFlow { - struct Edge { int u, v, cap, cost; }; + struct Edge { int u, v, cap, cost; }; - vector<Edge> edges; - vector<vector<int>> adj; - vector<int> vis, dist, par, ind; + vector<Edge> edges; + vector<vector<int>> adj; + vector<int> vis, dist, par, ind; - MinCostMaxFlow(int N) : - vis(N), dist(N), par(N), ind(N), adj(N) {} + MinCostMaxFlow(int N) : + vis(N), dist(N), par(N), ind(N), adj(N) {} - void add_edge(int u, int v, int cap, int cost) { - adj[u].pb(edges.size()); - edges.pb({ u, v, cap, cost }); - adj[v].pb(edges.size()); - edges.pb({ v, u, 0, -cost }); - } + void add_edge(int u, int v, int cap, int cost) { + adj[u].pb(edges.size()); + edges.pb({ u, v, cap, cost }); + adj[v].pb(edges.size()); + edges.pb({ v, u, 0, -cost }); + } - // Shortest Path Faster Algorithm (slower than - // Dijkstra but works with negative edges). - bool spfa(int s, int t) { - fill(all(dist), inf); - dist[s] = 0; - queue<int> Q; - Q.push(s); + // Shortest Path Faster Algorithm (slower than + // Dijkstra but works with negative edges). + bool spfa(int s, int t) { + fill(all(dist), inf); + dist[s] = 0; + queue<int> Q; + Q.push(s); - while (!Q.empty()) { - int u = Q.front(); Q.pop(); - vis[u] = 0; + while (!Q.empty()) { + int u = Q.front(); Q.pop(); + vis[u] = 0; - for (auto i : adj[u]) { - Edge &e = edges[i]; - int v = e.v; - if (e.cap > 0 && dist[v] > dist[u] + e.cost) { - dist[v] = dist[u] + e.cost; - par[v] = u; - ind[v] = i; + for (auto i : adj[u]) { + Edge &e = edges[i]; + int v = e.v; + if (e.cap > 0 && dist[v] > dist[u] + e.cost) { + dist[v] = dist[u] + e.cost; + par[v] = u; + ind[v] = i; - if (!vis[v]) { - Q.push(v); - vis[v] = 1; - } + if (!vis[v]) { + Q.push(v); + vis[v] = 1; + } + } + } } - } + return dist[t] < inf; } - return dist[t] < inf; - } - // Returns pair (min_cost, max_flow). - ii run(int s, int t) { - int min_cost = 0; - int max_flow = 0; + // Returns pair (min_cost, max_flow). + p<int> run(int s, int t) { + int min_cost = 0; + int max_flow = 0; - while (spfa(s, t)) { - int flow = inf; - for (int i = t; i != s; i = par[i]) - flow = min(flow, edges[ind[i]].cap); + while (spfa(s, t)) { + int flow = inf; + for (int i = t; i != s; i = par[i]) + flow = min(flow, edges[ind[i]].cap); - for (int i = t; i != s; i = par[i]) { - edges[ind[i] ].cap -= flow; - edges[ind[i]^1].cap += flow; - } + for (int i = t; i != s; i = par[i]) { + edges[ind[i] ].cap -= flow; + edges[ind[i]^1].cap += flow; + } - min_cost += flow * dist[t]; - max_flow += flow; - } + min_cost += flow * dist[t]; + max_flow += flow; + } - return ii(min_cost, max_flow); - } + return {min_cost, max_flow}; + } }; diff --git a/algorithms/graph/prim.cpp b/algorithms/graph/prim.cpp index cb3fc48..94db356 100644 --- a/algorithms/graph/prim.cpp +++ b/algorithms/graph/prim.cpp @@ -3,41 +3,41 @@ /// Time: O(E log E) /// Space: O(V + E) -vector<ii> graph[MAX]; +vector<p<int>> graph[MAX]; struct Prim { - int N; - vector<int> vis; - - Prim(int N) : - N(N), vis(N) - { init(); } - - void init() { - fill(all(vis), 0); - } - - int run() { - vis[0] = true; - priority_queue<ii> pq; - for (auto i : graph[0]) - pq.push(ii(-i.se, -i.fi)); - - int ans = 0; - while (!pq.empty()) { - ii front = pq.top(); pq.pop(); - int u = -front.se; - int w = -front.fi; - - if (!vis[u]) { - ans += w; - vis[u] = true; - for (auto i : graph[u]) - if (!vis[i.fi]) - pq.push(ii(-i.se, -i.fi)); - } + int N; + vector<int> vis; + + Prim(int N) : + N(N), vis(N) + { init(); } + + void init() { + fill(all(vis), 0); } - return ans; - } + int run() { + vis[0] = true; + priority_queue<p<int>> pq; + for (auto i : graph[0]) + pq.push({-i.se, -i.fi}); + + int ans = 0; + while (!pq.empty()) { + p<int> front = pq.top(); pq.pop(); + int u = -front.se; + int w = -front.fi; + + if (!vis[u]) { + ans += w; + vis[u] = true; + for (auto i : graph[u]) + if (!vis[i.fi]) + pq.push({-i.se, -i.fi}); + } + } + + return ans; + } }; diff --git a/algorithms/graph/steiner_tree.cpp b/algorithms/graph/steiner_tree.cpp index 073407b..b504f9f 100644 --- a/algorithms/graph/steiner_tree.cpp +++ b/algorithms/graph/steiner_tree.cpp @@ -26,26 +26,26 @@ int graph[MAXN][MAXN]; int dp[MAXN][1 << MAXT]; int steiner_tree(int n, int t) { - floyd_warshall(n); + floyd_warshall(n); - mset(dp, inf); - for (int i = 0; i < t; ++i) - dp[i][1 << i] = 0; + mset(dp, inf); + for (int i = 0; i < t; ++i) + dp[i][1 << i] = 0; - for (int mask = 1; mask < (1 << t); ++mask) { - for (int i = 0; i < n; ++i) - for (int ss = mask; ss > 0; ss = (ss - 1) & mask) - dp[i][mask] = min(dp[i][mask], - dp[i][ss] + dp[i][mask ^ ss]); + for (int mask = 1; mask < (1 << t); ++mask) { + for (int i = 0; i < n; ++i) + for (int ss = mask; ss > 0; ss = (ss - 1) & mask) + dp[i][mask] = min(dp[i][mask], + dp[i][ss] + dp[i][mask ^ ss]); - for (int i = 0; i < n; ++i) - for (int j = 0; j < n; ++j) - dp[j][mask] = min(dp[j][mask], - dp[i][mask] + dist[i][j]); - } + for (int i = 0; i < n; ++i) + for (int j = 0; j < n; ++j) + dp[j][mask] = min(dp[j][mask], + dp[i][mask] + dist[i][j]); + } - int ans = inf; - for (int i = 0; i < n; ++i) - ans = min(ans, dp[i][(1 << t) - 1]); - return ans; + int ans = inf; + for (int i = 0; i < n; ++i) + ans = min(ans, dp[i][(1 << t) - 1]); + return ans; } diff --git a/algorithms/graph/tarjan.cpp b/algorithms/graph/tarjan.cpp index 09741dc..6330496 100644 --- a/algorithms/graph/tarjan.cpp +++ b/algorithms/graph/tarjan.cpp @@ -7,54 +7,54 @@ vector<int> scc[MAX]; vector<int> graph[MAX]; struct Tarjan { - int N, ncomp, ind; - - stack<int> S; - vector<int> vis, id, low; - - Tarjan(int N) : - N(N), vis(N), id(N), low(N) - { init(); } - - void init() { - fill(all(id), -1); - fill(all(vis), 0); - } - - void dfs(int x) { - id[x] = low[x] = ind++; - vis[x] = 1; - S.push(x); - - for (auto i : graph[x]) - if (id[i] == -1) { - dfs(i); - low[x] = min(low[x], low[i]); - } else if (vis[i]) - low[x] = min(low[x], id[i]); - - // A SCC was found - if (low[x] == id[x]) { - int w; - do { - w = S.top(); S.pop(); - vis[w] = 0; - scc[ncomp].pb(w); - } while (w != x); - ncomp++; + int N, ncomp, ind; + + stack<int> S; + vector<int> vis, id, low; + + Tarjan(int N) : + N(N), vis(N), id(N), low(N) + { init(); } + + void init() { + fill(all(id), -1); + fill(all(vis), 0); + } + + void dfs(int x) { + id[x] = low[x] = ind++; + vis[x] = 1; + S.push(x); + + for (auto i : graph[x]) + if (id[i] == -1) { + dfs(i); + low[x] = min(low[x], low[i]); + } else if (vis[i]) + low[x] = min(low[x], id[i]); + + // A SCC was found + if (low[x] == id[x]) { + int w; + do { + w = S.top(); S.pop(); + vis[w] = 0; + scc[ncomp].pb(w); + } while (w != x); + ncomp++; + } + } + + int run() { + init(); + ncomp = ind = 0; + for (int i = 0; i < N; ++i) + scc[i].clear(); + + // Apply tarjan in every component + for (int i = 0; i < N; ++i) + if (id[i] == -1) + dfs(i); + return ncomp; } - } - - int run() { - init(); - ncomp = ind = 0; - for (int i = 0; i < N; ++i) - scc[i].clear(); - - // Apply tarjan in every component - for (int i = 0; i < N; ++i) - if (id[i] == -1) - dfs(i); - return ncomp; - } }; diff --git a/algorithms/graph/topological_sort.cpp b/algorithms/graph/topological_sort.cpp index 95a73fe..f9ff6cd 100644 --- a/algorithms/graph/topological_sort.cpp +++ b/algorithms/graph/topological_sort.cpp @@ -6,44 +6,44 @@ vector<int> graph[MAX]; struct TopologicalSort { - int N; - stack<int> S; - vector<int> vis; - - TopologicalSort(int N) : - N(N), vis(N) - { init(); } - - void init() { - fill(all(vis), 0); - } - - bool dfs(int x) { - vis[x] = 1; - for (auto i : graph[x]) { - if (vis[i] == 1) return true; - if (!vis[i] && dfs(i)) return true; + int N; + stack<int> S; + vector<int> vis; + + TopologicalSort(int N) : + N(N), vis(N) + { init(); } + + void init() { + fill(all(vis), 0); + } + + bool dfs(int x) { + vis[x] = 1; + for (auto i : graph[x]) { + if (vis[i] == 1) return true; + if (!vis[i] && dfs(i)) return true; + } + + vis[x] = 2; + S.push(x); + return false; } - vis[x] = 2; - S.push(x); - return false; - } - - // Returns whether graph contains cycle - // or not. - bool run(vector<int> &tsort) { - init(); - bool cycle = false; - for (int i = 0; i < N; ++i) - if (!vis[i]) - cycle |= dfs(i); - if (cycle) return true; - - while (!S.empty()) { - tsort.pb(S.top()); - S.pop(); + // Returns whether graph contains cycle + // or not. + bool run(vector<int> &tsort) { + init(); + bool cycle = false; + for (int i = 0; i < N; ++i) + if (!vis[i]) + cycle |= dfs(i); + if (cycle) return true; + + while (!S.empty()) { + tsort.pb(S.top()); + S.pop(); + } + return false; } - return false; - } }; diff --git a/algorithms/graph/travelling_salesman.cpp b/algorithms/graph/travelling_salesman.cpp index c64dce7..f6cf6d1 100644 --- a/algorithms/graph/travelling_salesman.cpp +++ b/algorithms/graph/travelling_salesman.cpp @@ -18,28 +18,28 @@ int dp[MAX][1 << MAX]; int graph[MAX][MAX]; struct TSP { - int N; + int N; - TSP(int N) : N(N) - { init(); } + TSP(int N) : N(N) + { init(); } - void init() { mset(dp, -1); } + void init() { mset(dp, -1); } - int solve(int i, int mask) { - if (mask == (1 << N) - 1) - return graph[i][0]; - if (dp[i][mask] != -1) - return dp[i][mask]; + int solve(int i, int mask) { + if (mask == (1 << N) - 1) + return graph[i][0]; + if (dp[i][mask] != -1) + return dp[i][mask]; - int ans = inf; - for (int j = 0; j < N; ++j) - if (!(mask & (1 << j)) && (i != j)) - ans = min(ans, graph[i][j] + - solve(j, mask | (1 << j))); - return dp[i][mask] = ans; - } + int ans = inf; + for (int j = 0; j < N; ++j) + if (!(mask & (1 << j)) && (i != j)) + ans = min(ans, graph[i][j] + + solve(j, mask | (1 << j))); + return dp[i][mask] = ans; + } - int run(int start) { - return solve(start, 1 << start); - } + int run(int start) { + return solve(start, 1 << start); + } }; diff --git a/algorithms/math/big_integer.cpp b/algorithms/math/big_integer.cpp index de456fb..899fa36 100644 --- a/algorithms/math/big_integer.cpp +++ b/algorithms/math/big_integer.cpp @@ -14,323 +14,323 @@ const int base = 1000000000; const int base_d = 9; struct BigInt { - int sign; - vector<int> num; - - BigInt() : sign(1) {} - BigInt(ll x) { *this = x; } - BigInt(const string &s) { read(s); } - - void operator=(const BigInt &x) { - sign = x.sign; - num = x.num; - } - - void operator=(ll x) { - sign = 1; - if (x < 0) sign = -1, x = -x; - for (; x > 0; x /= base) - pb(x % base); - } - - BigInt operator+(const BigInt &x) const { - if (sign != x.sign) return *this - (-x); - - int carry = 0; - BigInt res = x; - - for (int i = 0; i < max(size(), x.size()) || carry; ++i) { - if (i == (int) res.size()) - res.push_back(0); - - res[i] += carry + (i < size() ? num[i] : 0); - carry = res[i] >= base; - if (carry) res[i] -= base; + int sign; + vector<int> num; + + BigInt() : sign(1) {} + BigInt(i64 x) { *this = x; } + BigInt(const string &s) { read(s); } + + void operator=(const BigInt &x) { + sign = x.sign; + num = x.num; + } + + void operator=(i64 x) { + sign = 1; + if (x < 0) sign = -1, x = -x; + for (; x > 0; x /= base) + pb(x % base); + } + + BigInt operator+(const BigInt &x) const { + if (sign != x.sign) return *this - (-x); + + int carry = 0; + BigInt res = x; + + for (int i = 0; i < max(size(), x.size()) || carry; ++i) { + if (i == (int) res.size()) + res.push_back(0); + + res[i] += carry + (i < size() ? num[i] : 0); + carry = res[i] >= base; + if (carry) res[i] -= base; + } + + return res; + } + + BigInt operator-(const BigInt &x) const { + if (sign != x.sign) return *this + (-x); + if (abs() < x.abs()) return -(x - *this); + + int carry = 0; + BigInt res = *this; + + for (int i = 0; i < x.size() || carry; ++i) { + res[i] -= carry + (i < x.size() ? x[i] : 0); + carry = res[i] < 0; + if (carry) res[i] += base; + } + + res.trim(); + return res; + } + + void operator*=(int x) { + if (x < 0) sign = -sign, x = -x; + + int carry = 0; + for (int i = 0; i < size() || carry; ++i) { + if (i == size()) pb(0); + i64 cur = num[i] * (i64) x + carry; + + carry = (int) (cur / base); + num[i] = (int) (cur % base); + } + + trim(); } - return res; - } + BigInt operator*(int x) const { + BigInt res = *this; + res *= x; + return res; + } - BigInt operator-(const BigInt &x) const { - if (sign != x.sign) return *this + (-x); - if (abs() < x.abs()) return -(x - *this); + friend pair<BigInt, BigInt> divmod(const BigInt &a1, + const BigInt &b1) + { + int norm = base / (b1.back() + 1); + BigInt a = a1.abs() * norm; + BigInt b = b1.abs() * norm; + BigInt q, r; + q.resize(a.size()); + + for (int i = a.size() - 1; i >= 0; i--) { + r *= base; + r += a[i]; + + int s1 = r.size() <= b.size() ? 0 : r[b.size()]; + int s2 = r.size() <= b.size() - 1 ? 0 : r[b.size() - 1]; + int d = ((i64) base * s1 + s2) / b.back(); + + r -= b * d; + while (r < 0) r += b, --d; + q[i] = d; + } + + q.sign = a1.sign * b1.sign; + r.sign = a1.sign; + q.trim(); r.trim(); + + return make_pair(q, r / norm); + } - int carry = 0; - BigInt res = *this; + BigInt operator/(const BigInt &x) const { + return divmod(*this, x).fi; + } - for (int i = 0; i < x.size() || carry; ++i) { - res[i] -= carry + (i < x.size() ? x[i] : 0); - carry = res[i] < 0; - if (carry) res[i] += base; + BigInt operator%(const BigInt &x) const { + return divmod(*this, x).se; } - res.trim(); - return res; - } + void operator/=(int x) { + if (x < 0) sign = -sign, x = -x; - void operator*=(int x) { - if (x < 0) sign = -sign, x = -x; + for (int i = size() - 1, rem = 0; i >= 0; --i) { + i64 cur = num[i] + rem * (i64) base; + num[i] = (int) (cur / x); + rem = (int) (cur % x); + } - int carry = 0; - for (int i = 0; i < size() || carry; ++i) { - if (i == size()) pb(0); - ll cur = num[i] * (ll) x + carry; + trim(); + } - carry = (int) (cur / base); - num[i] = (int) (cur % base); + BigInt operator/(int x) const { + BigInt res = *this; + res /= x; + return res; } - trim(); - } - - BigInt operator*(int x) const { - BigInt res = *this; - res *= x; - return res; - } - - friend pair<BigInt, BigInt> divmod(const BigInt &a1, - const BigInt &b1) - { - int norm = base / (b1.back() + 1); - BigInt a = a1.abs() * norm; - BigInt b = b1.abs() * norm; - BigInt q, r; - q.resize(a.size()); - - for (int i = a.size() - 1; i >= 0; i--) { - r *= base; - r += a[i]; - - int s1 = r.size() <= b.size() ? 0 : r[b.size()]; - int s2 = r.size() <= b.size() - 1 ? 0 : r[b.size() - 1]; - int d = ((ll) base * s1 + s2) / b.back(); - - r -= b * d; - while (r < 0) r += b, --d; - q[i] = d; + int operator%(int x) const { + if (x < 0) x = -x; + + int m = 0; + for (int i = size() - 1; i >= 0; --i) + m = (num[i] + m * (i64) base) % x; + + return m * sign; } - q.sign = a1.sign * b1.sign; - r.sign = a1.sign; - q.trim(); r.trim(); + void operator+=(const BigInt &x) { *this = *this + x; } + void operator-=(const BigInt &x) { *this = *this - x; } + void operator*=(const BigInt &x) { *this = *this * x; } + void operator/=(const BigInt &x) { *this = *this / x; } + + bool operator<(const BigInt &x) const { + if (sign != x.sign) + return sign < x.sign; - return make_pair(q, r / norm); - } + if (size() != x.size()) + return size() * sign < x.size() * x.sign; + + for (int i = size() - 1; i >= 0; i--) + if (num[i] != x[i]) + return num[i] * sign < x[i] * sign; + + return false; + } - BigInt operator/(const BigInt &x) const { - return divmod(*this, x).fi; - } + bool operator>(const BigInt &x) const { + return x < *this; + } + bool operator<=(const BigInt &x) const { + return !(x < *this); + } + bool operator>=(const BigInt &x) const { + return !(*this < x); + } + bool operator==(const BigInt &x) const { + return !(*this < x) && !(x < *this); + } + bool operator!=(const BigInt &x) const { + return *this < x || x < *this; + } - BigInt operator%(const BigInt &x) const { - return divmod(*this, x).se; - } + void trim() { + while (!empty() && !back()) pop_back(); + if (empty()) sign = 1; + } - void operator/=(int x) { - if (x < 0) sign = -sign, x = -x; + bool is_zero() const { + return empty() || (size() == 1 && !num[0]); + } - for (int i = size() - 1, rem = 0; i >= 0; --i) { - ll cur = num[i] + rem * (ll) base; - num[i] = (int) (cur / x); - rem = (int) (cur % x); + BigInt operator-() const { + BigInt res = *this; + res.sign = -sign; + return res; } - trim(); - } - - BigInt operator/(int x) const { - BigInt res = *this; - res /= x; - return res; - } - - int operator%(int x) const { - if (x < 0) x = -x; - - int m = 0; - for (int i = size() - 1; i >= 0; --i) - m = (num[i] + m * (ll) base) % x; - - return m * sign; - } - - void operator+=(const BigInt &x) { *this = *this + x; } - void operator-=(const BigInt &x) { *this = *this - x; } - void operator*=(const BigInt &x) { *this = *this * x; } - void operator/=(const BigInt &x) { *this = *this / x; } - - bool operator<(const BigInt &x) const { - if (sign != x.sign) - return sign < x.sign; - - if (size() != x.size()) - return size() * sign < x.size() * x.sign; - - for (int i = size() - 1; i >= 0; i--) - if (num[i] != x[i]) - return num[i] * sign < x[i] * sign; - - return false; - } - - bool operator>(const BigInt &x) const { - return x < *this; - } - bool operator<=(const BigInt &x) const { - return !(x < *this); - } - bool operator>=(const BigInt &x) const { - return !(*this < x); - } - bool operator==(const BigInt &x) const { - return !(*this < x) && !(x < *this); - } - bool operator!=(const BigInt &x) const { - return *this < x || x < *this; - } - - void trim() { - while (!empty() && !back()) pop_back(); - if (empty()) sign = 1; - } - - bool is_zero() const { - return empty() || (size() == 1 && !num[0]); - } - - BigInt operator-() const { - BigInt res = *this; - res.sign = -sign; - return res; - } - - BigInt abs() const { - BigInt res = *this; - res.sign *= res.sign; - return res; - } - - ll to_long() const { - ll res = 0; - for (int i = size() - 1; i >= 0; i--) - res = res * base + num[i]; - return res * sign; - } - - friend BigInt gcd(const BigInt &a, const BigInt &b) { - return b.is_zero() ? a : gcd(b, a % b); - } - - friend BigInt lcm(const BigInt &a, const BigInt &b) { - return a / gcd(a, b) * b; - } - - void read(const string &s) { - sign = 1; - num.clear(); - - int pos = 0; - while (pos < s.size() && - (s[pos] == '-' || s[pos] == '+')) { - if (s[pos] == '-') - sign = -sign; - ++pos; + BigInt abs() const { + BigInt res = *this; + res.sign *= res.sign; + return res; } - for (int i = s.size() - 1; i >= pos; i -= base_d) { - int x = 0; - for (int j = max(pos, i - base_d + 1); j <= i; j++) - x = x * 10 + s[j] - '0'; - num.push_back(x); + i64 to_long() const { + i64 res = 0; + for (int i = size() - 1; i >= 0; i--) + res = res * base + num[i]; + return res * sign; } - trim(); - } - - friend istream& operator>>(istream &stream, BigInt &v) { - string s; stream >> s; - v.read(s); - return stream; - } - - friend ostream& operator<<(ostream &stream, const BigInt &x) { - if (x.sign == -1) - stream << '-'; - - stream << (x.empty() ? 0 : x.back()); - for (int i = x.size() - 2; i >= 0; --i) - stream << setw(base_d) << setfill('0') << x.num[i]; - - return stream; - } - - static vector<int> convert_base( - const vector<int> &a, - int oldd, int newd) { - vector<ll> p(max(oldd, newd) + 1); - p[0] = 1; - for (int i = 1; i < p.size(); i++) - p[i] = p[i - 1] * 10; - - ll cur = 0; - int curd = 0; - vector<int> res; - - for (int i = 0; i < a.size(); i++) { - cur += a[i] * p[curd]; - curd += oldd; - - while (curd >= newd) { - res.pb(int(cur % p[newd])); - cur /= p[newd]; - curd -= newd; - } + friend BigInt gcd(const BigInt &a, const BigInt &b) { + return b.is_zero() ? a : gcd(b, a % b); } - res.pb((int) cur); - while (!res.empty() && !res.back()) - res.pop_back(); - return res; - } + friend BigInt lcm(const BigInt &a, const BigInt &b) { + return a / gcd(a, b) * b; + } - BigInt operator*(const BigInt &x) const { - vector<int> a6 = convert_base(this->num, base_d, 6); - vector<int> b6 = convert_base(x.num, base_d, 6); + void read(const string &s) { + sign = 1; + num.clear(); + + int pos = 0; + while (pos < s.size() && + (s[pos] == '-' || s[pos] == '+')) { + if (s[pos] == '-') + sign = -sign; + ++pos; + } + + for (int i = s.size() - 1; i >= pos; i -= base_d) { + int x = 0; + for (int j = max(pos, i - base_d + 1); j <= i; j++) + x = x * 10 + s[j] - '0'; + num.push_back(x); + } + + trim(); + } - vector<ll> a(all(a6)); - vector<ll> b(all(b6)); + friend istream& operator>>(istream &stream, BigInt &v) { + string s; stream >> s; + v.read(s); + return stream; + } - while (a.size() < b.size()) a.pb(0); - while (b.size() < a.size()) b.pb(0); - while (a.size() & (a.size() - 1)) - a.pb(0), b.pb(0); + friend ostream& operator<<(ostream &stream, const BigInt &x) { + if (x.sign == -1) + stream << '-'; - vector<ll> c = karatsuba(a, b); + stream << (x.empty() ? 0 : x.back()); + for (int i = x.size() - 2; i >= 0; --i) + stream << setw(base_d) << setfill('0') << x.num[i]; - BigInt res; - int carry = 0; - res.sign = sign * x.sign; + return stream; + } - for (int i = 0; i < c.size(); i++) { - ll cur = c[i] + carry; - res.pb((int) (cur % 1000000)); - carry = (int) (cur / 1000000); + static vector<int> convert_base( + const vector<int> &a, + int oldd, int newd) { + vector<i64> p(max(oldd, newd) + 1); + p[0] = 1; + for (int i = 1; i < p.size(); i++) + p[i] = p[i - 1] * 10; + + i64 cur = 0; + int curd = 0; + vector<int> res; + + for (int i = 0; i < a.size(); i++) { + cur += a[i] * p[curd]; + curd += oldd; + + while (curd >= newd) { + res.pb(int(cur % p[newd])); + cur /= p[newd]; + curd -= newd; + } + } + + res.pb((int) cur); + while (!res.empty() && !res.back()) + res.pop_back(); + return res; } - res.num = convert_base(res.num, 6, base_d); - res.trim(); - return res; - } + BigInt operator*(const BigInt &x) const { + vector<int> a6 = convert_base(this->num, base_d, 6); + vector<int> b6 = convert_base(x.num, base_d, 6); + + vector<i64> a(all(a6)); + vector<i64> b(all(b6)); + + while (a.size() < b.size()) a.pb(0); + while (b.size() < a.size()) b.pb(0); + while (a.size() & (a.size() - 1)) + a.pb(0), b.pb(0); + + vector<i64> c = karatsuba(a, b); + + BigInt res; + int carry = 0; + res.sign = sign * x.sign; + + for (int i = 0; i < c.size(); i++) { + i64 cur = c[i] + carry; + res.pb((int) (cur % 1000000)); + carry = (int) (cur / 1000000); + } + + res.num = convert_base(res.num, 6, base_d); + res.trim(); + return res; + } - // Handles vector operations. - int back() const { return num.back(); } - bool empty() const { return num.empty(); } - size_t size() const { return num.size(); } + // Handles vector operations. + int back() const { return num.back(); } + bool empty() const { return num.empty(); } + size_t size() const { return num.size(); } - void pop_back() { num.pop_back(); } - void resize(int x) { num.resize(x); } - void push_back(int x) { num.push_back(x); } + void pop_back() { num.pop_back(); } + void resize(int x) { num.resize(x); } + void push_back(int x) { num.push_back(x); } - int &operator[](int i) { return num[i]; } - int operator[](int i) const { return num[i]; } + int &operator[](int i) { return num[i]; } + int operator[](int i) const { return num[i]; } }; diff --git a/algorithms/math/binary_exponentiation.cpp b/algorithms/math/binary_exponentiation.cpp index 7c46c08..9ea3f10 100644 --- a/algorithms/math/binary_exponentiation.cpp +++ b/algorithms/math/binary_exponentiation.cpp @@ -11,23 +11,24 @@ /// Time: O(log n) /// Space: O(1) -ll bin_mul(ll a, ll b, ll M = MOD) { - ll x = 0; - a %= M; - while (b) { - if (b & 1) x = (x + a) % M; - b >>= 1; - a = (a * 2) % M; - } - return x % M; +i64 bin_mul(i64 a, i64 b, i64 M = MOD) { + i64 x = 0; + a %= M; + while (b) { + if (b & 1) x = (x + a) % M; + b >>= 1; + a = (a * 2) % M; + } + return x % M; } -ll bin_exp(ll a, ll e, ll M = MOD) { - ll x = 1; - while (e) { - if (e & 1) x = bin_mul(x, a, M); - e >>= 1; - a = bin_mul(a, a, M); - } - return x % M; +i64 bin_exp(i64 a, i64 e, i64 M = MOD) { + i64 x = 1; + while (e) { + if (e & 1) + x = (x * a) % M; + e >>= 1; + a = (a * a) % M; + } + return x % M; } diff --git a/algorithms/math/chinese_remainder_theorem.cpp b/algorithms/math/chinese_remainder_theorem.cpp index 8e3f5de..aae46cc 100644 --- a/algorithms/math/chinese_remainder_theorem.cpp +++ b/algorithms/math/chinese_remainder_theorem.cpp @@ -16,35 +16,35 @@ /// - It is very easy to get overflow, since the $LCM$ is computed from /// all $m_i$, BigInt or Python should be considered if inputs are too large -ll norm(ll a, ll b) { - a %= b; - return (a < 0) ? a + b : a; +i64 norm(i64 a, i64 b) { + a %= b; + return (a < 0) ? a + b : a; } -pair<ll,ll> crt_single(ll a, ll n, ll b, ll m) { - ans_t e = ext_gcd(n, m); +pair<i64,i64> crt_single(i64 a, i64 n, i64 b, i64 m) { + ans_t e = ext_gcd(n, m); - if ((a - b) % e.d != 0) - return {-1,-1}; // No solution + if ((a - b) % e.d != 0) + return {-1,-1}; // No solution - ll lcm = (m/e.d) * n; - ll ans = norm(a + e.x*(b-a) / e.d % (m/e.d)*n, lcm); - return {norm(ans, lcm), lcm}; + i64 lcm = (m/e.d) * n; + i64 ans = norm(a + e.x*(b-a) / e.d % (m/e.d)*n, lcm); + return {norm(ans, lcm), lcm}; } -ll crt(vector<ll> a, vector<ll> m) { - ll ans = a[0]; - ll lcm = m[0]; +i64 crt(vector<i64> a, vector<i64> m) { + i64 ans = a[0]; + i64 lcm = m[0]; - int t = a.size(); - for (int i = 1; i < t; ++i) { - auto ss = crt_single(ans, lcm, a[i], m[i]); - if (ss.fi == -1) - return -1; // No solution + int t = a.size(); + for (int i = 1; i < t; ++i) { + auto ss = crt_single(ans, lcm, a[i], m[i]); + if (ss.fi == -1) + return -1; // No solution - ans = ss.fi; - lcm = ss.se; - } + ans = ss.fi; + lcm = ss.se; + } - return ans; + return ans; } diff --git a/algorithms/math/euler_totient.cpp b/algorithms/math/euler_totient.cpp index 6f407b9..a9530dc 100644 --- a/algorithms/math/euler_totient.cpp +++ b/algorithms/math/euler_totient.cpp @@ -3,17 +3,17 @@ /// Time: O(sqrt{n}) /// Space: O(1) -ll phi(ll n) { - ll ans = n; +i64 phi(i64 n) { + i64 ans = n; - for (ll i = 2; i*i <= n; i++) - if (n % i == 0) { - while (n % i == 0) n /= i; - ans -= ans / i; - } + for (i64 i = 2; i*i <= n; i++) + if (n % i == 0) { + while (n % i == 0) n /= i; + ans -= ans / i; + } - if (n > 1) - ans -= (ans / n); + if (n > 1) + ans -= (ans / n); - return ans; + return ans; } diff --git a/algorithms/math/extended_euclidean.cpp b/algorithms/math/extended_euclidean.cpp index e9dbee7..7dd4458 100644 --- a/algorithms/math/extended_euclidean.cpp +++ b/algorithms/math/extended_euclidean.cpp @@ -3,10 +3,10 @@ /// Time: O(log min(a,b)) /// Space: O(1) -struct ans_t { ll x, y, d; }; +struct ans_t { i64 x, y, d; }; -ans_t ext_gcd(ll a, ll b) { - if (a == 0) return {0, 1, b}; - ans_t e = ext_gcd(b % a, a); - return {e.y - (b/a)*e.x, e.x, e.d}; +ans_t ext_gcd(i64 a, i64 b) { + if (a == 0) return {0, 1, b}; + ans_t e = ext_gcd(b % a, a); + return {e.y - (b/a)*e.x, e.x, e.d}; } diff --git a/algorithms/math/fft.cpp b/algorithms/math/fft.cpp index c4f829f..b85e4d4 100644 --- a/algorithms/math/fft.cpp +++ b/algorithms/math/fft.cpp @@ -4,117 +4,117 @@ /// Space: O(N) struct FFT { - struct Complex { - float r, i; + struct Complex { + float r, i; - Complex() : r(0), i(0) {} - Complex(float r, float i) : r(r), i(i) {} + Complex() : r(0), i(0) {} + Complex(float r, float i) : r(r), i(i) {} - Complex operator+(Complex b) { - return Complex(r + b.r, i + b.i); - } + Complex operator+(Complex b) { + return Complex(r + b.r, i + b.i); + } - Complex operator-(Complex b) { - return Complex(r - b.r, i - b.i); - } + Complex operator-(Complex b) { + return Complex(r - b.r, i - b.i); + } - Complex operator*(Complex b) { - return Complex(r*b.r - i*b.i, r*b.i + i*b.r); - } + Complex operator*(Complex b) { + return Complex(r*b.r - i*b.i, r*b.i + i*b.r); + } - Complex operator/(Complex b) { - float div = (b.r * b.r) + (b.i * b.i); - return Complex((r * b.r + i * b.i) / div, - (i * b.r - r * b.i) / div); - } + Complex operator/(Complex b) { + float div = (b.r * b.r) + (b.i * b.i); + return Complex((r * b.r + i * b.i) / div, + (i * b.r - r * b.i) / div); + } - static inline Complex conj(Complex a) { - return Complex(a.r, -a.i); - } - }; + static inline Complex conj(Complex a) { + return Complex(a.r, -a.i); + } + }; - vector<int> rev = {0, 1}; - vector<Complex> roots = {{0, 0}, {1, 0}}; + vector<int> rev = {0, 1}; + vector<Complex> roots = {{0, 0}, {1, 0}}; - // Initializes reversed-bit vector (rev) and - // roots of unity vector (roots) - void init(int nbase) { - rev.resize(1 << nbase); - roots.resize(1 << nbase); + // Initializes reversed-bit vector (rev) and + // roots of unity vector (roots) + void init(int nbase) { + rev.resize(1 << nbase); + roots.resize(1 << nbase); - // Build rev vector - for (int i = 0; i < (1 << nbase); ++i) - rev[i] = (rev[i >> 1] >> 1) + \ - ((i & 1) << (nbase - 1)); + // Build rev vector + for (int i = 0; i < (1 << nbase); ++i) + rev[i] = (rev[i >> 1] >> 1) + \ + ((i & 1) << (nbase - 1)); - // Build roots vector - for (int base = 1; base < nbase; ++base) { - float angle = 2 * M_PI / (1 << (base + 1)); + // Build roots vector + for (int base = 1; base < nbase; ++base) { + float angle = 2 * M_PI / (1 << (base + 1)); - for (int i = 1 << (base - 1); i < (1 << base); ++i) { - float angle_i = angle * (2*i + 1 - (1 << base)); + for (int i = 1 << (base - 1); i < (1 << base); ++i) { + float angle_i = angle * (2*i + 1 - (1 << base)); - roots[i << 1] = roots[i]; - roots[(i << 1) + 1] = Complex(cos(angle_i), - sin(angle_i)); - } + roots[i << 1] = roots[i]; + roots[(i << 1) + 1] = Complex(cos(angle_i), + sin(angle_i)); + } + } } - } - - void fft(vector<Complex> &a) { - int n = a.size(); - for (int i = 0; i < n; ++i) - if (i < rev[i]) - swap(a[i], a[rev[i]]); - - for (int s = 1; s < n; s <<= 1) { - for (int k = 0; k < n; k += (s << 1)) { - for (int j = 0; j < s; ++j) { - Complex z = a[k + j + s] * roots[j + s]; - a[k + j + s] = a[k + j] - z; - a[k + j] = a[k + j] + z; + void fft(vector<Complex> &a) { + int n = a.size(); + + for (int i = 0; i < n; ++i) + if (i < rev[i]) + swap(a[i], a[rev[i]]); + + for (int s = 1; s < n; s <<= 1) { + for (int k = 0; k < n; k += (s << 1)) { + for (int j = 0; j < s; ++j) { + Complex z = a[k + j + s] * roots[j + s]; + a[k + j + s] = a[k + j] - z; + a[k + j] = a[k + j] + z; + } + } } - } } - } - vector<int> multiply(const vector<int> &a, - const vector<int> &b) - { - int nbase, need = a.size() + b.size() + 1; + vector<int> multiply(const vector<int> &a, + const vector<int> &b) + { + int nbase, need = a.size() + b.size() + 1; - for (nbase = 0; (1 << nbase) < need; ++nbase); - init(nbase); + for (nbase = 0; (1 << nbase) < need; ++nbase); + init(nbase); - int size = 1 << nbase; - vector<Complex> fa(size); + int size = 1 << nbase; + vector<Complex> fa(size); - for (int i = 0; i < size; ++i) { - int x = (i < a.size() ? a[i] : 0); - int y = (i < b.size() ? b[i] : 0); - fa[i] = Complex(x, y); - } + for (int i = 0; i < size; ++i) { + int x = (i < a.size() ? a[i] : 0); + int y = (i < b.size() ? b[i] : 0); + fa[i] = Complex(x, y); + } - fft(fa); + fft(fa); - Complex r(0, -0.25 / size); - for (int i = 0; i <= (size >> 1); ++i) { - int j = (size - i) & (size - 1); - Complex z = (fa[j]*fa[j] - conj(fa[i]*fa[i])) * r; + Complex r(0, -0.25 / size); + for (int i = 0; i <= (size >> 1); ++i) { + int j = (size - i) & (size - 1); + Complex z = (fa[j]*fa[j] - conj(fa[i]*fa[i])) * r; - if (i != j) - fa[j] = (fa[i]*fa[i] - conj(fa[j]*fa[j])) * r; + if (i != j) + fa[j] = (fa[i]*fa[i] - conj(fa[j]*fa[j])) * r; - fa[i] = z; - } + fa[i] = z; + } - fft(fa); + fft(fa); - vector<int> res(need); - for (int i = 0; i < need; ++i) - res[i] = fa[i].r + 0.5; + vector<int> res(need); + for (int i = 0; i < need; ++i) + res[i] = fa[i].r + 0.5; - return res; - } + return res; + } }; diff --git a/algorithms/math/gale_shapley.cpp b/algorithms/math/gale_shapley.cpp index f6d38b5..2e9b24f 100644 --- a/algorithms/math/gale_shapley.cpp +++ b/algorithms/math/gale_shapley.cpp @@ -30,44 +30,44 @@ // Receives matrix of preferences pref[2*N][N] and returns // vector v where v[m] contains preference of the m-th man. vector<int> gale_shapley(const vector<vector<int>> &pref) { - int n = pref[0].size(); - vector<int> w_part(n, -1); - vector<int> m_part(n, -1); - vector<int> start(n, 0); + int n = pref[0].size(); + vector<int> w_part(n, -1); + vector<int> m_part(n, -1); + vector<int> start(n, 0); - while (true) { - int m; - for (m = 0; m < n; ++m) - if (m_part[m] == -1) - break; + while (true) { + int m; + for (m = 0; m < n; ++m) + if (m_part[m] == -1) + break; - if (m == n) break; + if (m == n) break; - for (; start[m] < n && m_part[m] == -1; ++start[m]) { - int w = pref[m][start[m]]; + for (; start[m] < n && m_part[m] == -1; ++start[m]) { + int w = pref[m][start[m]]; - if (w_part[w - n] == -1) { - w_part[w - n] = m; - m_part[m] = w; - } else { - int m1 = w_part[w - n]; - bool pref_m = false; + if (w_part[w - n] == -1) { + w_part[w - n] = m; + m_part[m] = w; + } else { + int m1 = w_part[w - n]; + bool pref_m = false; - for (int j = 0; j < n; ++j) - if (pref[w][j] == m) { - pref_m = true; - break; - } else if (pref[w][j] == m1) - break; + for (int j = 0; j < n; ++j) + if (pref[w][j] == m) { + pref_m = true; + break; + } else if (pref[w][j] == m1) + break; - if (pref_m) { - w_part[w - n] = m; - m_part[m] = w; - m_part[m1] = -1; + if (pref_m) { + w_part[w - n] = m; + m_part[m] = w; + m_part[m1] = -1; + } + } } - } } - } - return m_part; + return m_part; } diff --git a/algorithms/math/karatsuba.cpp b/algorithms/math/karatsuba.cpp index 22f248f..d18a500 100644 --- a/algorithms/math/karatsuba.cpp +++ b/algorithms/math/karatsuba.cpp @@ -3,46 +3,46 @@ /// Time: O(n^{log(3)}) /// Space: O(n) -vector<ll> karatsuba(const vector<ll> &a, - const vector<ll> &b) +vector<i64> karatsuba(const vector<i64> &a, + const vector<i64> &b) { - int n = a.size(); - vector<ll> res(n + n); - - if (n <= 32) { - for (int i = 0; i < n; i++) - for (int j = 0; j < n; j++) - res[i + j] += a[i] * b[j]; + int n = a.size(); + vector<i64> res(n + n); + + if (n <= 32) { + for (int i = 0; i < n; i++) + for (int j = 0; j < n; j++) + res[i + j] += a[i] * b[j]; + + return res; + } + + int k = n >> 1; + vector<i64> a1(a.begin(), a.begin() + k); + vector<i64> a2(a.begin() + k, a.end()); + vector<i64> b1(b.begin(), b.begin() + k); + vector<i64> b2(b.begin() + k, b.end()); + + vector<i64> a1b1 = karatsuba(a1, b1); + vector<i64> a2b2 = karatsuba(a2, b2); + + for (int i = 0; i < k; i++) + a2[i] += a1[i]; + for (int i = 0; i < k; i++) + b2[i] += b1[i]; + + vector<i64> r = karatsuba(a2, b2); + for (int i = 0; i < a1b1.size(); i++) + r[i] -= a1b1[i]; + for (int i = 0; i < a2b2.size(); i++) + r[i] -= a2b2[i]; + + for (int i = 0; i < r.size(); i++) + res[i + k] += r[i]; + for (int i = 0; i < a1b1.size(); i++) + res[i] += a1b1[i]; + for (int i = 0; i < a2b2.size(); i++) + res[i + n] += a2b2[i]; return res; - } - - int k = n >> 1; - vector<ll> a1(a.begin(), a.begin() + k); - vector<ll> a2(a.begin() + k, a.end()); - vector<ll> b1(b.begin(), b.begin() + k); - vector<ll> b2(b.begin() + k, b.end()); - - vector<ll> a1b1 = karatsuba(a1, b1); - vector<ll> a2b2 = karatsuba(a2, b2); - - for (int i = 0; i < k; i++) - a2[i] += a1[i]; - for (int i = 0; i < k; i++) - b2[i] += b1[i]; - - vector<ll> r = karatsuba(a2, b2); - for (int i = 0; i < a1b1.size(); i++) - r[i] -= a1b1[i]; - for (int i = 0; i < a2b2.size(); i++) - r[i] -= a2b2[i]; - - for (int i = 0; i < r.size(); i++) - res[i + k] += r[i]; - for (int i = 0; i < a1b1.size(); i++) - res[i] += a1b1[i]; - for (int i = 0; i < a2b2.size(); i++) - res[i + n] += a2b2[i]; - - return res; } diff --git a/algorithms/math/legendre.cpp b/algorithms/math/legendre.cpp index 229c642..4d5737f 100644 --- a/algorithms/math/legendre.cpp +++ b/algorithms/math/legendre.cpp @@ -15,12 +15,12 @@ /// Space: O(1) int legendre(int n, int p) { - int x = 0; + int x = 0; - while (n) { - n /= p; - x += n; - } + while (n) { + n /= p; + x += n; + } - return x; + return x; } diff --git a/algorithms/math/linear_diophantine_equation.cpp b/algorithms/math/linear_diophantine_equation.cpp index e523f25..1ca8140 100644 --- a/algorithms/math/linear_diophantine_equation.cpp +++ b/algorithms/math/linear_diophantine_equation.cpp @@ -14,27 +14,27 @@ /// Space: O(1) struct Diophantine { - int a, b, c, d; - int x0, y0; + int a, b, c, d; + int x0, y0; - bool has_solution; + bool has_solution; - Diophantine(int a, int b, int c) : - a(a), b(b), c(c) - { init(); } + Diophantine(int a, int b, int c) : + a(a), b(b), c(c) + { init(); } - void init() { - ans_t e = ext_gcd(a, b); d = e.d; - if (c % d == 0) { - x0 = e.x * (c / d); - y0 = e.y * (c / d); - has_solution = true; - } else - has_solution = false; - } + void init() { + ans_t e = ext_gcd(a, b); d = e.d; + if (c % d == 0) { + x0 = e.x * (c / d); + y0 = e.y * (c / d); + has_solution = true; + } else + has_solution = false; + } - ii get(int t) { - if (!has_solution) return ii(inf, inf); - return ii(x0 + t * (b / d), y0 - t * (a / d)); - } + p<int> get(int t) { + if (!has_solution) return p<int>(inf, inf); + return p<int>(x0 + t * (b / d), y0 - t * (a / d)); + } }; diff --git a/algorithms/math/matrix.cpp b/algorithms/math/matrix.cpp index e82d439..3e76196 100644 --- a/algorithms/math/matrix.cpp +++ b/algorithms/math/matrix.cpp @@ -4,29 +4,29 @@ template <typename T> struct Matrix { - int r, c; - vector<vector<T>> m; + int r, c; + vector<vector<T>> m; - Matrix(int r, int c) : r(r), c(c) { - m = vector<vector<T>>(r, vector<T>(c, 0)); - } + Matrix(int r, int c) : r(r), c(c) { + m = vector<vector<T>>(r, vector<T>(c, 0)); + } - Matrix operator*(Matrix a) { - assert(r == a.c && c == a.r); + Matrix operator*(Matrix a) { + assert(r == a.c && c == a.r); - Matrix res(r, c); - for (int i = 0; i < r; i++) - for (int j = 0; j < c; j++) { - res[i][j] = 0; + Matrix res(r, c); + for (int i = 0; i < r; i++) + for (int j = 0; j < c; j++) { + res[i][j] = 0; - for (int k = 0; k < c; k++) - res[i][j] += m[i][k] * a[k][j]; - } + for (int k = 0; k < c; k++) + res[i][j] += m[i][k] * a[k][j]; + } - return res; - } + return res; + } - vector<T> &operator[](int i) { - return m[i]; - } + vector<T> &operator[](int i) { + return m[i]; + } }; diff --git a/algorithms/math/miller_rabin.cpp b/algorithms/math/miller_rabin.cpp index 202ba13..866e927 100644 --- a/algorithms/math/miller_rabin.cpp +++ b/algorithms/math/miller_rabin.cpp @@ -3,24 +3,24 @@ /// Time: O(k * log^3 n) /// Space: O(1) -const vector<ll> A = { - 2, 325, 9375, 28178, 450775, 9780504, 1795265022 +const vector<i64> A = { + 2, 325, 9375, 28178, 450775, 9780504, 1795265022 }; -bool is_prime(ll n) { - if (n < 2 || n % 6 % 4 != 1) - return n - 2 < 2; +bool is_prime(i64 n) { + if (n < 2 || n % 6 % 4 != 1) + return n - 2 < 2; - ll s = __builtin_ctzll(n - 1); - ll d = n >> s; + i64 s = __builtin_ctzll(n - 1); + i64 d = n >> s; - for (auto a : A) { - ll p = bin_exp(a, d, n), i = s; - while (p != 1 && p != n - 1 && a % n && i--) - p = bin_mul(p, p, n); - if (p != n - 1 && i != s) - return 0; - } + for (auto a : A) { + i64 p = bin_exp(a, d, n), i = s; + while (p != 1 && p != n - 1 && a % n && i--) + p = bin_mul(p, p, n); + if (p != n - 1 && i != s) + return 0; + } - return 1; + return 1; } diff --git a/algorithms/math/modular_multiplicative_inverse.cpp b/algorithms/math/modular_multiplicative_inverse.cpp index f1024e2..7d115d3 100644 --- a/algorithms/math/modular_multiplicative_inverse.cpp +++ b/algorithms/math/modular_multiplicative_inverse.cpp @@ -10,12 +10,12 @@ // Fermat's Little Theorem: Used when m is prime int fermat(int a, int m) { - return bin_exp(a, m - 2); + return bin_exp(a, m - 2); } // Extended Euclidean Algorithm: Used when m // and a are coprime int extended_euclidean(int a, int m) { - ans_t g = ext_gcd(a, m); - return (g.x % m + m) % m; + ans_t g = ext_gcd(a, m); + return (g.x % m + m) % m; } diff --git a/algorithms/math/pollard_rho.cpp b/algorithms/math/pollard_rho.cpp index 99239b1..c5a8b76 100644 --- a/algorithms/math/pollard_rho.cpp +++ b/algorithms/math/pollard_rho.cpp @@ -6,30 +6,30 @@ /// Time: O(n^{1/4}) /// Space: O(1) -ll pollard(ll n) { - auto f = [n](ll x) { - return (bin_mul(x, x, n) + 1) % n; - }; +i64 pollard(i64 n) { + auto f = [n](i64 x) { + return (bin_mul(x, x, n) + 1) % n; + }; - if (n % 2 == 0) return 2; + if (n % 2 == 0) return 2; - for (ll i = 2; ; ++i) { - ll x = i, y = f(x), p; - while ((p = __gcd(n + y - x, n)) == 1) - x = f(x), y = f(f(y)); - if (p != n) return p; - } + for (i64 i = 2; ; ++i) { + i64 x = i, y = f(x), p; + while ((p = __gcd(n + y - x, n)) == 1) + x = f(x), y = f(f(y)); + if (p != n) return p; + } } -vector<ll> factor(ll n) { - if (n == 1) return {}; - if (is_prime(n)) // Use Miller-Rabin - return {n}; +vector<i64> factor(i64 n) { + if (n == 1) return {}; + if (is_prime(n)) // Use Miller-Rabin + return {n}; - ll x = pollard(n); - auto l = factor(x); - auto r = factor(n/x); + i64 x = pollard(n); + auto l = factor(x); + auto r = factor(n/x); - l.insert(l.end(), all(r)); - return l; + l.insert(l.end(), all(r)); + return l; } diff --git a/algorithms/math/sieve_of_eratosthenes.cpp b/algorithms/math/sieve_of_eratosthenes.cpp index 07e3c66..6740d53 100644 --- a/algorithms/math/sieve_of_eratosthenes.cpp +++ b/algorithms/math/sieve_of_eratosthenes.cpp @@ -4,17 +4,17 @@ /// Space: O(n) vector<int> sieve(int n) { - vector<int> primes; - vector<int> is_prime(n + 1, 1); + vector<int> primes; + vector<int> is_prime(n + 1, 1); - for (int p = 2; p*p <= n; ++p) - if (is_prime[p]) - for (int i = p*p; i <= n; i += p) - is_prime[i] = false; + for (int p = 2; p*p <= n; ++p) + if (is_prime[p]) + for (int i = p*p; i <= n; i += p) + is_prime[i] = false; - for (int p = 2; p <= n; ++p) - if (is_prime[p]) - primes.pb(p); + for (int p = 2; p <= n; ++p) + if (is_prime[p]) + primes.pb(p); - return primes; + return primes; } diff --git a/algorithms/paradigm/dp_divide_and_conquer.cpp b/algorithms/paradigm/dp_divide_and_conquer.cpp new file mode 100644 index 0000000..8333560 --- /dev/null +++ b/algorithms/paradigm/dp_divide_and_conquer.cpp @@ -0,0 +1,32 @@ +/// Dynamic Programming, Divide and Conquer Optimization +/// +/// Time: O(n * m * log n) +/// Space: O(n * m) + +vector<int> v; +int dp[102][20101]; + +void solve(int g, int i, int j, int l, int r) { + int m = (i + j) / 2; + if (i > j) return; + + p<int> best = { -inf, -1 }; + for (int k = l; k <= min(r, m); ++k) { + mx = max(mx, v[k]); + mn = min(mn, v[k]); + best = max(best, { dp[g-1][k-1] + cost(k, m), k }); + } + + dp[g][m] = best.fi; + solve(g, i, m - 1, l, best.se); + solve(g, m + 1, j, best.se, r); +} + +int calc() { + // setup dp[0][i]; + + for (int i = 1; i <= k; ++i) + solve(i, 1, n, 1, n); + + return dp[k][n]; +} diff --git a/algorithms/paradigm/edit_distance.cpp b/algorithms/paradigm/edit_distance.cpp index e3517d7..5794184 100644 --- a/algorithms/paradigm/edit_distance.cpp +++ b/algorithms/paradigm/edit_distance.cpp @@ -6,18 +6,18 @@ int dp[MAX][MAX]; int edit_distance(string a, string b) { - for (int i = 0; i <= a.size(); ++i) - for (int j = 0; j <= b.size(); ++j) - if (i == 0) - dp[i][j] = j; - else if (j == 0) - dp[i][j] = i; - else if (a[i-1] == b[j-1]) - dp[i][j] = d[i-1][j-1]; - else - dp[i][j] = 1 + min({dp[i][j-1], - dp[i-1][j], - dp[i-1][j-1]}); + for (int i = 0; i <= a.size(); ++i) + for (int j = 0; j <= b.size(); ++j) + if (i == 0) + dp[i][j] = j; + else if (j == 0) + dp[i][j] = i; + else if (a[i-1] == b[j-1]) + dp[i][j] = d[i-1][j-1]; + else + dp[i][j] = 1 + min({dp[i][j-1], + dp[i-1][j], + dp[i-1][j-1]}); - return dp[a.size()][b.size()]; + return dp[a.size()][b.size()]; } diff --git a/algorithms/paradigm/kadane.cpp b/algorithms/paradigm/kadane.cpp index ab38c65..e8ff1cd 100644 --- a/algorithms/paradigm/kadane.cpp +++ b/algorithms/paradigm/kadane.cpp @@ -4,22 +4,22 @@ /// Space: O(n + m) int kadane(const vector<int> &v, int &start, int &end) { - start = end = 0; - int msf = -inf, meh = 0, s = 0; + start = end = 0; + int msf = -inf, meh = 0, s = 0; - for (int i = 0; i < v.size(); ++i) { - meh += v[i]; + for (int i = 0; i < v.size(); ++i) { + meh += v[i]; - if (msf < meh) { - msf = meh; - start = s, end = i; - } + if (msf < meh) { + msf = meh; + start = s, end = i; + } - if (meh < 0) { - meh = 0; - s = i + 1; + if (meh < 0) { + meh = 0; + s = i + 1; + } } - } - return msf; + return msf; } diff --git a/algorithms/paradigm/lis.cpp b/algorithms/paradigm/lis.cpp index 821903d..8e54061 100644 --- a/algorithms/paradigm/lis.cpp +++ b/algorithms/paradigm/lis.cpp @@ -4,15 +4,15 @@ /// Space: O(n) int lis(vector<int> v) { - vector<int> lis(v.size()); lis[0] = 1; + vector<int> lis(v.size()); lis[0] = 1; - for (int i = 1; i < v.size(); ++i) { - lis[i] = 1; + for (int i = 1; i < v.size(); ++i) { + lis[i] = 1; - for (int j = 0; j < i; ++j) - if (v[i] > v[j] && lis[i] < lis[j] + 1) - lis[i] = lis[j] + 1; - } + for (int j = 0; j < i; ++j) + if (v[i] > v[j] && lis[i] < lis[j] + 1) + lis[i] = lis[j] + 1; + } - return *max_element(all(lis)); + return *max_element(all(lis)); } diff --git a/algorithms/paradigm/longest_common_subsequence.cpp b/algorithms/paradigm/longest_common_subsequence.cpp index acffd38..70979a1 100644 --- a/algorithms/paradigm/longest_common_subsequence.cpp +++ b/algorithms/paradigm/longest_common_subsequence.cpp @@ -6,33 +6,33 @@ int dp[MAX][MAX]; string lcs(string a, string b) { - for (int i = 0; i <= a.size(); ++i) { - for (int j = 0; j <= b.size(); ++j) { - if (i == 0 || j == 0) - dp[i][j] = 0; - else if (a[i - 1] == b[j - 1]) - dp[i][j] = dp[i - 1][j - 1] + 1; - else - dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]); + for (int i = 0; i <= a.size(); ++i) { + for (int j = 0; j <= b.size(); ++j) { + if (i == 0 || j == 0) + dp[i][j] = 0; + else if (a[i - 1] == b[j - 1]) + dp[i][j] = dp[i - 1][j - 1] + 1; + else + dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]); + } } - } - // The size is already at dp[n][m], now the common - // subsequence is retrieved: + // The size is already at dp[n][m], now the common + // subsequence is retrieved: - int idx = dp[a.size()][b.size()]; - string ans(idx, ' '); + int idx = dp[a.size()][b.size()]; + string ans(idx, ' '); - int i = a.size(), j = b.size(); - while (i > 0 && j > 0) { - if (a[i - 1] == b[ j - 1]) { - ans[idx - 1] = a[i - 1]; - i--, j--, idx--; - } else if (dp[i - 1][j] > dp[i][j - 1]) - i--; - else - j--; - } + int i = a.size(), j = b.size(); + while (i > 0 && j > 0) { + if (a[i - 1] == b[ j - 1]) { + ans[idx - 1] = a[i - 1]; + i--, j--, idx--; + } else if (dp[i - 1][j] > dp[i][j - 1]) + i--; + else + j--; + } - return ans; + return ans; } diff --git a/algorithms/paradigm/ternary_search.cpp b/algorithms/paradigm/ternary_search.cpp index 457f407..c6b5c72 100644 --- a/algorithms/paradigm/ternary_search.cpp +++ b/algorithms/paradigm/ternary_search.cpp @@ -14,20 +14,20 @@ // Maximum of f: comp = greater<T>() template <typename T, class F = function<T(T)>> T ternary_search(T l, T r, F f, function<bool(T,T)> comp) { - T rt, lt; + T rt, lt; - for (int i = 0; i < 500; ++i) { - if (fabs(r - l) < EPS) - return (l + r) / 2; + for (int i = 0; i < 500; ++i) { + if (fabs(r - l) < EPS) + return (l + r) / 2; - lt = (r - l) / 3 + l; - rt = ((r - l) * 2) / 3 + l; + lt = (r - l) / 3 + l; + rt = ((r - l) * 2) / 3 + l; - if (comp(f(lt), f(rt))) - l = lt; - else - r = rt; - } + if (comp(f(lt), f(rt))) + l = lt; + else + r = rt; + } - return (l + r) / 2; + return (l + r) / 2; } diff --git a/algorithms/string/aho_corasick.cpp b/algorithms/string/aho_corasick.cpp index b6aaa36..f9ad5fb 100644 --- a/algorithms/string/aho_corasick.cpp +++ b/algorithms/string/aho_corasick.cpp @@ -11,107 +11,107 @@ /// - Match might not find all occurences when repeated strings are given (fix with map) struct AhoCorasick { - struct Node { - vector<int> words; - map<char,int> next; - int fail, cnt, hei, occ; + struct Node { + vector<int> words; + map<char,int> next; + int fail, cnt, hei, occ; - Node() : fail(0), cnt(0), hei(0), occ(-1) {} - int has(char i) { return next.count(i); } - int &operator[](char i) { return next[i]; } - }; - - vector<int> top; - vector<Node> trie; + Node() : fail(0), cnt(0), hei(0), occ(-1) {} + int has(char i) { return next.count(i); } + int &operator[](char i) { return next[i]; } + }; - AhoCorasick(const vector<string> &v) { - trie.pb(Node()); - build(v); - top = preprocess(); - } + vector<int> top; + vector<Node> trie; - int insert(const string &s) { - int n = 0; - for (int i = 0; i < s.size(); n = trie[n][s[i]], ++i) - if (!trie[n].has(s[i])) { - trie[n][s[i]] = trie.size(); - trie[n].hei = i + 1; + AhoCorasick(const vector<string> &v) { trie.pb(Node()); - } - return n; - } - - void build(const vector<string> &v) { - for (int i = 0; i < v.size(); ++i) { - int n = insert(v[i]); - trie[n].words.pb(i); + build(v); + top = preprocess(); } - } - inline int suffix(int v, char c) { - while (v != 0 && !trie[v].has(c)) v = trie[v].fail; - if (trie[v].has(c)) v = trie[v][c]; - return v; - } + int insert(const string &s) { + int n = 0; + for (int i = 0; i < s.size(); n = trie[n][s[i]], ++i) + if (!trie[n].has(s[i])) { + trie[n][s[i]] = trie.size(); + trie[n].hei = i + 1; + trie.pb(Node()); + } + return n; + } - vector<int> preprocess() { - vector<int> Q = { 0 }; - for (int i = 0; i != Q.size(); ++i) { - int u = Q[i]; - for (auto j : trie[u].next) { - int &v = trie[j.se].fail; - if (u) { - v = suffix(trie[u].fail, j.fi); - trie[j.se].occ = trie[v].words.size() ? v : trie[v].occ; - } else { - v = trie[u].fail; - trie[j.se].occ = -1; + void build(const vector<string> &v) { + for (int i = 0; i < v.size(); ++i) { + int n = insert(v[i]); + trie[n].words.pb(i); } - Q.pb(j.se); - } } - return Q; - } - // Returns vector with indices of the strings occuring at - // least once in pattern p - vector<int> match(const string &p) { - int u = 0; - for (auto i : p) { - u = suffix(u, i); - trie[u].cnt++; + inline int suffix(int v, char c) { + while (v != 0 && !trie[v].has(c)) v = trie[v].fail; + if (trie[v].has(c)) v = trie[v][c]; + return v; } - for (int i = top.size() - 1; i >= 0; --i) - trie[trie[top[i]].fail].cnt += trie[top[i]].cnt; - vector<int> ans; - for (auto &i : trie) - if (i.cnt && i.words.size()) - for (auto j : i.words) ans.pb(j); + vector<int> preprocess() { + vector<int> Q = { 0 }; + for (int i = 0; i != Q.size(); ++i) { + int u = Q[i]; + for (auto j : trie[u].next) { + int &v = trie[j.se].fail; + if (u) { + v = suffix(trie[u].fail, j.fi); + trie[j.se].occ = trie[v].words.size() ? v : trie[v].occ; + } else { + v = trie[u].fail; + trie[j.se].occ = -1; + } + Q.pb(j.se); + } + } + return Q; + } - sort(all(ans)); - return ans; - } + // Returns vector with indices of the strings occuring at + // least once in pattern p + vector<int> match(const string &p) { + int u = 0; + for (auto i : p) { + u = suffix(u, i); + trie[u].cnt++; + } + for (int i = top.size() - 1; i >= 0; --i) + trie[trie[top[i]].fail].cnt += trie[top[i]].cnt; - // Returns all occurences of strings in p, where ans[i].fi - // is the indice of the string and ans[i].se is where in p - // does the string start - vector<ii> match_all(const string &p) { - int u = 0; - vector<ii> ans; - for (int i = 0; i < p.size(); ++i) { - u = suffix(u, p[i]); - for (auto j : trie[u].words) - ans.pb({j, i - trie[u].hei + 1}); + vector<int> ans; + for (auto &i : trie) + if (i.cnt && i.words.size()) + for (auto j : i.words) ans.pb(j); - int x = u; - while (trie[x].occ != -1) { - x = trie[x].occ; - for (auto j : trie[x].words) - ans.pb({j, i - trie[x].hei + 1}); - } + sort(all(ans)); + return ans; + } + + // Returns all occurences of strings in p, where ans[i].fi + // is the indice of the string and ans[i].se is where in p + // does the string start + vector<p<int>> match_all(const string &p) { + int u = 0; + vector<p<int>> ans; + for (int i = 0; i < p.size(); ++i) { + u = suffix(u, p[i]); + for (auto j : trie[u].words) + ans.pb({j, i - trie[u].hei + 1}); + + int x = u; + while (trie[x].occ != -1) { + x = trie[x].occ; + for (auto j : trie[x].words) + ans.pb({j, i - trie[x].hei + 1}); + } + } + sort(all(ans)); + return ans; } - sort(all(ans)); - return ans; - } }; diff --git a/algorithms/string/booth.cpp b/algorithms/string/booth.cpp index 19a684e..8b53794 100644 --- a/algorithms/string/booth.cpp +++ b/algorithms/string/booth.cpp @@ -12,31 +12,31 @@ // Maximal: func = greater<char>() // Minimal: func = less<char>() string booth(string s, function<bool(char,char)> func) { - string S = s + s; - vector<int> f(S.size(), -1); + string S = s + s; + vector<int> f(S.size(), -1); - int k = 0; - for (int j = 1; j < S.size(); ++j) { - char sj = S[j]; - int i = f[j - k - 1]; + int k = 0; + for (int j = 1; j < S.size(); ++j) { + char sj = S[j]; + int i = f[j - k - 1]; - while (i != -1 && sj != S[k+i+1]) { - if (func(sj, S[k + i + 1])) - k = j - i - 1; - i = f[i]; - } + while (i != -1 && sj != S[k+i+1]) { + if (func(sj, S[k + i + 1])) + k = j - i - 1; + i = f[i]; + } - if (sj != S[k+i+1]) { - if (func(sj, S[k])) - k = j; + if (sj != S[k+i+1]) { + if (func(sj, S[k])) + k = j; - f[j-k] = -1; - } else - f[j-k] = i + 1; - } + f[j-k] = -1; + } else + f[j-k] = i + 1; + } - string ans(s.size(), 0); - for (int i = 0; i < s.size(); ++i) - ans[i] = S[k+i]; - return ans; + string ans(s.size(), 0); + for (int i = 0; i < s.size(); ++i) + ans[i] = S[k+i]; + return ans; } diff --git a/algorithms/string/kmp.cpp b/algorithms/string/kmp.cpp index 85ff29f..9db20e7 100644 --- a/algorithms/string/kmp.cpp +++ b/algorithms/string/kmp.cpp @@ -8,34 +8,34 @@ /// Status: Tested (URI2350,UVA10679) struct KMP { - string patt; - vector<int> pi; + string patt; + vector<int> pi; - KMP(string patt) : - patt(patt), pi(patt.size()) - { preprocess(); } + KMP(string patt) : + patt(patt), pi(patt.size()) + { preprocess(); } - void preprocess() { - pi[0] = 0; - for (int i = 1, j = 0; i < patt.size(); ++i) { - while (j > 0 && patt[i] != patt[j]) - j = pi[j - 1]; + void preprocess() { + pi[0] = 0; + for (int i = 1, j = 0; i < patt.size(); ++i) { + while (j > 0 && patt[i] != patt[j]) + j = pi[j - 1]; - if (patt[i] == patt[j]) j++; - pi[i] = j; + if (patt[i] == patt[j]) j++; + pi[i] = j; + } } - } - void search(const string &txt) { - for (int i = 0, j = 0; i < txt.size(); ++i) { - while (j > 0 && txt[i] != patt[j]) - j = pi[j - 1]; + void search(const string &txt) { + for (int i = 0, j = 0; i < txt.size(); ++i) { + while (j > 0 && txt[i] != patt[j]) + j = pi[j - 1]; - if (txt[i] == patt[j]) j++; - if (j == patt.size()) { - cout << "Pattern found at " << (i - j) << ende; - j = pi[j - 1]; - } + if (txt[i] == patt[j]) j++; + if (j == patt.size()) { + cout << "Pattern found at " << (i - j) << ende; + j = pi[j - 1]; + } + } } - } }; diff --git a/algorithms/string/z-function.cpp b/algorithms/string/z-function.cpp index c1e6c78..3744a23 100644 --- a/algorithms/string/z-function.cpp +++ b/algorithms/string/z-function.cpp @@ -4,22 +4,22 @@ /// Space: O(n) vector<int> z_function(string s) { - int n = (int) s.length(); - vector<int> z(n); + int n = (int) s.length(); + vector<int> z(n); - int l = 0, r = 0; - for (int i = 1; i < n; ++i) { - if (i <= r) - z[i] = min(r - i + 1, z[i - l]); + int l = 0, r = 0; + for (int i = 1; i < n; ++i) { + if (i <= r) + z[i] = min(r - i + 1, z[i - l]); - while (i + z[i] < n && s[z[i]] == s[i + z[i]]) - z[i]++; + while (i + z[i] < n && s[z[i]] == s[i + z[i]]) + z[i]++; - if (i + z[i] - 1 > r) { - l = i; - r = i + z[i] - 1; + if (i + z[i] - 1 > r) { + l = i; + r = i + z[i] - 1; + } } - } - return z; + return z; } diff --git a/algorithms/structure/avl.cpp b/algorithms/structure/avl.cpp index 5746c13..32ba0dd 100644 --- a/algorithms/structure/avl.cpp +++ b/algorithms/structure/avl.cpp @@ -4,83 +4,83 @@ /// Space: O(n) struct AVL { - struct Node { - int key, height; - Node *left, *right; + struct Node { + int key, height; + Node *left, *right; - Node(int k) : - key(k), height(1), - left(nullptr), right(nullptr) - {} + Node(int k) : + key(k), height(1), + left(nullptr), right(nullptr) + {} - static int get_height(Node *n) { - return (n == nullptr) ? 0 : n->height; - } + static int get_height(Node *n) { + return (n == nullptr) ? 0 : n->height; + } - void fix_state() { - height = max(Node::get_height(left), - Node::get_height(left)) + 1; - } + void fix_state() { + height = max(Node::get_height(left), + Node::get_height(left)) + 1; + } + + int get_balance() { + return Node::get_height(left) - + Node::get_height(right); + } + }; - int get_balance() { - return Node::get_height(left) - - Node::get_height(right); + Node *root; + + AVL() : root(nullptr) {} + + void insert(int key) { + root = insert(root, key); } - }; - - Node *root; - - AVL() : root(nullptr) {} - - void insert(int key) { - root = insert(root, key); - } - -private: - - Node *rotate_right(Node *n) { - Node *aux1 = n->left; - Node *aux2 = aux1->right; - aux1->right = n; aux1->fix_state(); - n->left = aux2; n->fix_state(); - return aux1; - } - - Node *rotate_left(Node *n) { - Node *aux1 = n->right; - Node *aux2 = aux1->left; - aux1->left = n; aux1->fix_state(); - n->right = aux2; n->fix_state(); - return aux1; - } - - Node *insert(Node *n, int key) { - if (n == nullptr) { - Node *new_node = new Node(key); - if (root == nullptr) root = new_node; - return new_node; + + private: + + Node *rotate_right(Node *n) { + Node *aux1 = n->left; + Node *aux2 = aux1->right; + aux1->right = n; aux1->fix_state(); + n->left = aux2; n->fix_state(); + return aux1; } - if (key < n->key) - n->left = insert(n->left, key); - else - n->right = insert(n->right, key); - - int balance = n->get_balance(); - n->fix_state(); - - if (balance > 1 && key < n->left->key) { - return rotate_right(n); - } else if (balance < -1 && key > n->right->key) { - return rotate_left(n); - } else if (balance > 1 && key > n->left->key) { - n->left = rotate_left(n->left); - return rotate_right(n); - } else if (balance < -1 && key < n->right->key) { - n->right = rotate_right(n->right); - return rotate_left(n); + Node *rotate_left(Node *n) { + Node *aux1 = n->right; + Node *aux2 = aux1->left; + aux1->left = n; aux1->fix_state(); + n->right = aux2; n->fix_state(); + return aux1; } - return n; - } + Node *insert(Node *n, int key) { + if (n == nullptr) { + Node *new_node = new Node(key); + if (root == nullptr) root = new_node; + return new_node; + } + + if (key < n->key) + n->left = insert(n->left, key); + else + n->right = insert(n->right, key); + + int balance = n->get_balance(); + n->fix_state(); + + if (balance > 1 && key < n->left->key) { + return rotate_right(n); + } else if (balance < -1 && key > n->right->key) { + return rotate_left(n); + } else if (balance > 1 && key > n->left->key) { + n->left = rotate_left(n->left); + return rotate_right(n); + } else if (balance < -1 && key < n->right->key) { + n->right = rotate_right(n->right); + return rotate_left(n); + } + + return n; + } }; diff --git a/algorithms/structure/bit.cpp b/algorithms/structure/bit.cpp index 3b20716..6230c58 100644 --- a/algorithms/structure/bit.cpp +++ b/algorithms/structure/bit.cpp @@ -6,20 +6,20 @@ /// Space: O(n) struct BIT { - int N; - vector<int> tree; + int N; + vector<int> tree; - BIT(int N) : N(N), tree(N, 0) {} + BIT(int N) : N(N), tree(N, 0) {} - int query(int idx) { - int sum = 0; - for (; idx > 0; idx -= (idx & -idx)) - sum += tree[idx]; - return sum; - } + int query(int idx) { + int sum = 0; + for (; idx > 0; idx -= (idx & -idx)) + sum += tree[idx]; + return sum; + } - void update(int idx, int val) { - for (; idx < N; idx += (idx & -idx)) - tree[idx] += val; - } + void update(int idx, int val) { + for (; idx < N; idx += (idx & -idx)) + tree[idx] += val; + } }; diff --git a/algorithms/structure/bit2d.cpp b/algorithms/structure/bit2d.cpp index e02ba49..cafba95 100644 --- a/algorithms/structure/bit2d.cpp +++ b/algorithms/structure/bit2d.cpp @@ -8,23 +8,24 @@ /// Status: Tested (MCAIRO) struct BIT2D { - int N, M; - vector<vector<int>> tree; + int N, M; + vector<vector<int>> tree; - BIT2D(int N, int M) : N(N), M(M), - tree(N, vector<int>(M, 0)) {} + BIT2D(int N, int M) : N(N), M(M), + tree(N, vector<int>(M, 0)) + {} - int query(int idx, int idy) { - int sum = 0; - for (; idx > 0; idx -= (idx & -idx)) - for (int m = idy; m > 0; m -= (m & -m)) - sum += tree[idx][m]; - return sum; - } + int query(int idx, int idy) { + int sum = 0; + for (; idx > 0; idx -= (idx & -idx)) + for (int m = idy; m > 0; m -= (m & -m)) + sum += tree[idx][m]; + return sum; + } - void update(int idx, int idy, int val) { - for (; idx < N; idx += (idx & -idx)) - for (int m = idy; m < M; m += (m & -m)) - tree[idx][m] += val; - } + void update(int idx, int idy, int val) { + for (; idx < N; idx += (idx & -idx)) + for (int m = idy; m < M; m += (m & -m)) + tree[idx][m] += val; + } }; diff --git a/algorithms/structure/bitmask.cpp b/algorithms/structure/bitmask.cpp index 59d2a92..1137e14 100644 --- a/algorithms/structure/bitmask.cpp +++ b/algorithms/structure/bitmask.cpp @@ -4,36 +4,36 @@ /// Space: O(1) struct Bitmask { - ll state; + i64 state; - Bitmask(ll state) : - state(state) {} + Bitmask(i64 state) : + state(state) {} - void set(int pos) { - state |= (1 << pos); - } + void set(int pos) { + state |= (1 << pos); + } - void set_all(int n) { - state = (1 << n) - 1; - } + void set_all(int n) { + state = (1 << n) - 1; + } - void unset(int pos) { - state &= ~(1 << pos); - } + void unset(int pos) { + state &= ~(1 << pos); + } - void unset_all() { - state = 0; - } + void unset_all() { + state = 0; + } - int get(int pos) { - return state & (1 << pos); - } + int get(int pos) { + return state & (1 << pos); + } - void toggle(int pos) { - state ^= (1 << pos); - } + void toggle(int pos) { + state ^= (1 << pos); + } - int least_significant_one() { - return state & (-state); - } + int least_significant_one() { + return state & (-state); + } }; diff --git a/algorithms/structure/disjoint_set.cpp b/algorithms/structure/disjoint_set.cpp index 67a7594..256ceee 100644 --- a/algorithms/structure/disjoint_set.cpp +++ b/algorithms/structure/disjoint_set.cpp @@ -7,33 +7,33 @@ /// Space: O(n) struct DisjointSet { - int N; - vector<int> rnk, par, siz; + int N; + vector<int> rnk, par, siz; - DisjointSet(int N) : - N(N), rnk(N), par(N), siz(N) - { init(); } + DisjointSet(int N) : + N(N), rnk(N), par(N), siz(N) + { init(); } - void init() { - iota(all(par), 0); - fill(all(rnk), 0); - fill(all(siz), 1); - } + void init() { + iota(all(par), 0); + fill(all(rnk), 0); + fill(all(siz), 1); + } - int find_set(int x) { - if (par[x] != x) - par[x] = find_set(par[x]); - return par[x]; - } + int find_set(int x) { + if (par[x] != x) + par[x] = find_set(par[x]); + return par[x]; + } - void union_set(int x, int y) { - x = find_set(x); - y = find_set(y); + void union_set(int x, int y) { + x = find_set(x); + y = find_set(y); - if (x == y) return; - if (rnk[x] < rnk[y]) swap(x, y); - if (rnk[x] == rnk[y]) rnk[x]++; - par[y] = x; - siz[x] += siz[y]; - } + if (x == y) return; + if (rnk[x] < rnk[y]) swap(x, y); + if (rnk[x] == rnk[y]) rnk[x]++; + par[y] = x; + siz[x] += siz[y]; + } }; diff --git a/algorithms/structure/hash_function.cpp b/algorithms/structure/hash_function.cpp index 4497b53..b26f1b6 100644 --- a/algorithms/structure/hash_function.cpp +++ b/algorithms/structure/hash_function.cpp @@ -10,19 +10,19 @@ /// Space: O(n) struct CustomHash { - static uint64_t splitmix64(uint64_t x) { - x += 0x9e3779b97f4a7c15; - x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9; - x = (x ^ (x >> 27)) * 0x94d049bb133111eb; - return x ^ (x >> 31); - } + static uint64_t splitmix64(uint64_t x) { + x += 0x9e3779b97f4a7c15; + x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9; + x = (x ^ (x >> 27)) * 0x94d049bb133111eb; + return x ^ (x >> 31); + } - size_t operator()(uint64_t x) const { - static const uint64_t FIXED_RANDOM = chrono::steady_clock::now() - .time_since_epoch() - .count(); - return splitmix64(x + FIXED_RANDOM); - } + size_t operator()(uint64_t x) const { + static const uint64_t FIXED_RANDOM = chrono::steady_clock::now() + .time_since_epoch() + .count(); + return splitmix64(x + FIXED_RANDOM); + } }; -unordered_map<ll,int,CustomHash> M; +unordered_map<i64,int,CustomHash> M; diff --git a/algorithms/structure/lazy_segment_tree.cpp b/algorithms/structure/lazy_segment_tree.cpp index 758c47d..fa39bd2 100644 --- a/algorithms/structure/lazy_segment_tree.cpp +++ b/algorithms/structure/lazy_segment_tree.cpp @@ -17,71 +17,71 @@ int N; template <typename T, class F = function<T(const T&, const T&)>> struct LazySegmentTree { - F func; - T id = T(); - vector<T> tree, lazy; - - LazySegmentTree(F func) : - func(func), tree(MAX*4, 0), lazy(MAX*4, 0) {} - - void build(const vector<T> &v, - int node = 1, int l = 0, int r = N - 1) - { - if (l > r) return; - - if (l == r) - tree[node] = v[l]; - else { - int m = (l + r) / 2; - build(v, left(node), l, m); - build(v, right(node), m + 1, r); - tree[node] = func(tree[left(node)], tree[right(node)]); + F func; + T id = T(); + vector<T> tree, lazy; + + LazySegmentTree(F func) : + func(func), tree(MAX*4, 0), lazy(MAX*4, 0) {} + + void build(const vector<T> &v, + int node = 1, int l = 0, int r = N - 1) + { + if (l > r) return; + + if (l == r) + tree[node] = v[l]; + else { + int m = (l + r) / 2; + build(v, left(node), l, m); + build(v, right(node), m + 1, r); + tree[node] = func(tree[left(node)], tree[right(node)]); + } } - } - void push(int node, int l, int r, T val) { - tree[node] += (r - l + 1) * val; + void push(int node, int l, int r, T val) { + tree[node] += (r - l + 1) * val; - if (l != r) { - lazy[left(node)] += val; - lazy[right(node)] += val; - } - - lazy[node] = 0; - } - - void update(int i, int j, T val, - int node = 1, int l = 0, int r = N - 1) - { - if (lazy[node] != 0) - push(node, l, r, lazy[node]); + if (l != r) { + lazy[left(node)] += val; + lazy[right(node)] += val; + } - if (l > r || l > j || r < i) return; + lazy[node] = 0; + } - if (i <= l && r <= j) - push(node, l, r, val); - else { - int m = (l + r) / 2; - update(i, j, val, left(node), l, m); - update(i, j, val, right(node), m + 1, r); - tree[node] = func(tree[left(node)], tree[right(node)]); + void update(int i, int j, T val, + int node = 1, int l = 0, int r = N - 1) + { + if (lazy[node] != 0) + push(node, l, r, lazy[node]); + + if (l > r || l > j || r < i) return; + + if (i <= l && r <= j) + push(node, l, r, val); + else { + int m = (l + r) / 2; + update(i, j, val, left(node), l, m); + update(i, j, val, right(node), m + 1, r); + tree[node] = func(tree[left(node)], tree[right(node)]); + } } - } - T query(int i, int j, - int node = 1, int l = 0, int r = N - 1) - { - if (l > r || l > j || r < i) return id; + T query(int i, int j, + int node = 1, int l = 0, int r = N - 1) + { + if (l > r || l > j || r < i) return id; - if (lazy[node]) - push(node, l, r, lazy[node]); + if (lazy[node]) + push(node, l, r, lazy[node]); - if (l >= i && r <= j) - return tree[node]; + if (l >= i && r <= j) + return tree[node]; - int m = (l + r) / 2; - T q1 = query(i, j, left(node), l, m); - T q2 = query(i, j, right(node), m + 1, r); - return func(q1, q2); - } + int m = (l + r) / 2; + T q1 = query(i, j, left(node), l, m); + T q2 = query(i, j, right(node), m + 1, r); + return func(q1, q2); + } }; diff --git a/algorithms/structure/mo_algorithm.cpp b/algorithms/structure/mo_algorithm.cpp index 64803b3..e73eb31 100644 --- a/algorithms/structure/mo_algorithm.cpp +++ b/algorithms/structure/mo_algorithm.cpp @@ -7,39 +7,39 @@ /// - Remember to implement add, remove, and get\_ans functions. struct Query { - int l, r, idx; + int l, r, idx; }; vector<int> mos_algorithm(vector<Query> Q) { - int blk_size = (int) sqrt(v.size() + 0.0) + 1; + int blk_size = (int) sqrt(v.size() + 0.0) + 1; - vector<int> ans(Q.size()); - sort(all(Q), [](Query a, Query b) { - return ii(a.l / blk_size, a.r) < ii(b.l / blk_size, b.r); - }); + vector<int> ans(Q.size()); + sort(all(Q), [](Query a, Query b) { + return p<int>(a.l / blk_size, a.r) < p<int>(b.l / blk_size, b.r); + }); - int curr_l = 0, curr_r = -1; + int curr_l = 0, curr_r = -1; - for (auto q : Q) { - while (curr_l > q.l) { - curr_l--; - add(curr_l); - } - while (curr_r < q.r) { - curr_r++; - add(curr_r); - } - while (curr_l < q.l) { - remove(curr_l); - curr_l++; - } - while (curr_r > q.r) { - remove(curr_r); - curr_r--; - } + for (auto q : Q) { + while (curr_l > q.l) { + curr_l--; + add(curr_l); + } + while (curr_r < q.r) { + curr_r++; + add(curr_r); + } + while (curr_l < q.l) { + remove(curr_l); + curr_l++; + } + while (curr_r > q.r) { + remove(curr_r); + curr_r--; + } - ans[q.idx] = get_ans(); - } + ans[q.idx] = get_ans(); + } - return ans; + return ans; } diff --git a/algorithms/structure/policy_tree.cpp b/algorithms/structure/policy_tree.cpp index 9e06d9b..92850f8 100644 --- a/algorithms/structure/policy_tree.cpp +++ b/algorithms/structure/policy_tree.cpp @@ -15,21 +15,20 @@ using namespace __gnu_pbds; template <typename T> -using ordered_set = - tree<T, null_type, less<T>, rb_tree_tag, - tree_order_statistics_node_update>; +using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, + tree_order_statistics_node_update>; void operations() { - ordered_set S; + ordered_set S; - S.insert(x); - S.erase(x); + S.insert(x); + S.erase(x); - // Return iordered_set terator to the k-th largest element - // (counting from zero) - int pos = *S.find_by_order(k); + // Return iordered_set terator to the k-th largest element + // (counting from zero) + int pos = *S.find_by_order(k); - // Return the number of items strictly smaller - // than x - int ord = S.order_of_key(x) + // Return the number of items strictly smaller + // than x + int ord = S.order_of_key(x) } diff --git a/algorithms/structure/segment_tree.cpp b/algorithms/structure/segment_tree.cpp index 9f38848..edc5f26 100644 --- a/algorithms/structure/segment_tree.cpp +++ b/algorithms/structure/segment_tree.cpp @@ -10,34 +10,34 @@ template<typename T, class F = function<T(T,T)>> struct SegmentTree { - int N; - F func; - T id = T(); - vector<T> tree; + int N; + F func; + T id = T(); + vector<T> tree; - SegmentTree(int N, F func) : - N(N), func(func), tree(N*2, id) - {} + SegmentTree(int N, F func) : + N(N), func(func), tree(N*2, id) + {} - void build(const vector<T> &v) { - for (int i = 0; i < N; ++i) - tree[N + i] = v[i]; - for (int i = N - 1; i > 0; --i) - tree[i] = func(tree[i*2], tree[i*2+1]); - } + void build(const vector<T> &v) { + for (int i = 0; i < N; ++i) + tree[N + i] = v[i]; + for (int i = N - 1; i > 0; --i) + tree[i] = func(tree[i*2], tree[i*2+1]); + } - void update(int i, T x) { - tree[i += N] = x; - for (i /= 2; i > 0; i /= 2) - tree[i] = func(tree[i*2], tree[i*2+1]); - } + void update(int i, T x) { + tree[i += N] = x; + for (i /= 2; i > 0; i /= 2) + tree[i] = func(tree[i*2], tree[i*2+1]); + } - T query(int i, int j) { - T left = id, right = id; - for (i += N, j += N; i < j; i /= 2, j /= 2) { - if (i & 1) left = func(left, tree[i++]); - if (j & 1) right = func(right, tree[--j]); + T query(int i, int j) { + T left = id, right = id; + for (i += N, j += N; i < j; i /= 2, j /= 2) { + if (i & 1) left = func(left, tree[i++]); + if (j & 1) right = func(right, tree[--j]); + } + return func(left, right); } - return func(left, right); - } }; diff --git a/algorithms/structure/segment_tree_2d.cpp b/algorithms/structure/segment_tree_2d.cpp index e749c57..f3ad859 100644 --- a/algorithms/structure/segment_tree_2d.cpp +++ b/algorithms/structure/segment_tree_2d.cpp @@ -16,102 +16,102 @@ int N, M; template<typename T, class F = function<T(T,T)>> struct SegmentTree2D { - using matrix<T> = vector<vector<T>>; - - F func; - T id = T(); - matrix<T> tree; - - SegmentTree2D(F func) : - tree(4*MAX, vector<T>(4*MAX, 0)), - func(func) {} - - void build_row(const matrix<T> &mat, - int ni, int li, int ri, - int nj = 1, int lj = 0, int rj = M - 1) - { - if (lj == rj) { - if (li == ri) - tree[ni][nj] = mat[li][lj]; - else - tree[ni][nj] = func(tree[left(ni)][nj], tree[right(ni)][nj]); - } else { - int m = (lj + rj) / 2; - build_row(mat, ni, li, ri, left(nj), lj, m); - build_row(mat, ni, li, ri, right(nj), m+1, rj); - tree[ni][nj] = func(tree[ni][left(nj)], tree[ni][right(nj)]); + using matrix<T> = vector<vector<T>>; + + F func; + T id = T(); + matrix<T> tree; + + SegmentTree2D(F func) : + tree(4*MAX, vector<T>(4*MAX, 0)), + func(func) {} + + void build_row(const matrix<T> &mat, + int ni, int li, int ri, + int nj = 1, int lj = 0, int rj = M - 1) + { + if (lj == rj) { + if (li == ri) + tree[ni][nj] = mat[li][lj]; + else + tree[ni][nj] = func(tree[left(ni)][nj], tree[right(ni)][nj]); + } else { + int m = (lj + rj) / 2; + build_row(mat, ni, li, ri, left(nj), lj, m); + build_row(mat, ni, li, ri, right(nj), m+1, rj); + tree[ni][nj] = func(tree[ni][left(nj)], tree[ni][right(nj)]); + } } - } - - void build(const matrix<T> &mat, - int ni = 1, int li = 0, int ri = N - 1) - { - if (li != ri) { - int m = (li + ri) / 2; - build(mat, left(ni), li, m); - build(mat, right(ni), m+1, ri); + + void build(const matrix<T> &mat, + int ni = 1, int li = 0, int ri = N - 1) + { + if (li != ri) { + int m = (li + ri) / 2; + build(mat, left(ni), li, m); + build(mat, right(ni), m+1, ri); + } + build_row(mat, ni, li, ri); } - build_row(mat, ni, li, ri); - } - - T query_row(int j1, int j2, int i, - int nj = 1, int lj = 0, int rj = M - 1) - { - if (lj > rj || lj > j2 || rj < j1) return id; - - if (j1 <= lj && rj <= j2) - return tree[i][nj]; - - int m = (lj + rj) / 2; - T q1 = query_row(j1, j2, i, left(nj), lj, m); - T q2 = query_row(j1, j2, i, right(nj), m + 1, rj); - return func(q1, q2); - } - - T query(int i1, int j1, int i2, int j2, - int ni = 1, int li = 0, int ri = N - 1) - { - if (li > ri || li > i2 || ri < i1) return id; - - if (i1 <= li && ri <= i2) - return query_row(j1, j2, ni); - - int m = (li + ri) / 2; - T q1 = query(i1, j1, i2, j2, left(ni), li, m); - T q2 = query(i1, j1, i2, j2, right(ni), m + 1, ri); - return func(q1, q2); - } - - void update_row(int i, int j, T val, - int ni, int li, int ri, - int nj = 1, int lj = 0, int rj = M - 1) - { - if (lj > rj || lj > j || rj < j) return; - - if (lj == rj) { - if (li == ri) - tree[ni][nj] = val; - else - tree[ni][nj] = func(tree[left(ni)][nj], tree[right(ni)][nj]); - } else { - int m = (lj + rj) / 2; - update_row(i, j, val, ni, li, ri, left(nj), lj, m); - update_row(i, j, val, ni, li, ri, right(nj), m+1, rj); - tree[ni][nj] = func(tree[ni][left(nj)], tree[ni][right(nj)]); + + T query_row(int j1, int j2, int i, + int nj = 1, int lj = 0, int rj = M - 1) + { + if (lj > rj || lj > j2 || rj < j1) return id; + + if (j1 <= lj && rj <= j2) + return tree[i][nj]; + + int m = (lj + rj) / 2; + T q1 = query_row(j1, j2, i, left(nj), lj, m); + T q2 = query_row(j1, j2, i, right(nj), m + 1, rj); + return func(q1, q2); } - } - void update(int i, int j, T val, - int ni = 1, int li = 0, int ri = N - 1) - { - if (li > ri || li > i || ri < i) return; + T query(int i1, int j1, int i2, int j2, + int ni = 1, int li = 0, int ri = N - 1) + { + if (li > ri || li > i2 || ri < i1) return id; + + if (i1 <= li && ri <= i2) + return query_row(j1, j2, ni); - if (li != ri) { - int m = (li + ri) / 2; - update(i, j, val, left(ni), li, m); - update(i, j, val, right(ni), m+1, ri); + int m = (li + ri) / 2; + T q1 = query(i1, j1, i2, j2, left(ni), li, m); + T q2 = query(i1, j1, i2, j2, right(ni), m + 1, ri); + return func(q1, q2); } - update_row(i, j, val, ni, li, ri); - } + void update_row(int i, int j, T val, + int ni, int li, int ri, + int nj = 1, int lj = 0, int rj = M - 1) + { + if (lj > rj || lj > j || rj < j) return; + + if (lj == rj) { + if (li == ri) + tree[ni][nj] = val; + else + tree[ni][nj] = func(tree[left(ni)][nj], tree[right(ni)][nj]); + } else { + int m = (lj + rj) / 2; + update_row(i, j, val, ni, li, ri, left(nj), lj, m); + update_row(i, j, val, ni, li, ri, right(nj), m+1, rj); + tree[ni][nj] = func(tree[ni][left(nj)], tree[ni][right(nj)]); + } + } + + void update(int i, int j, T val, + int ni = 1, int li = 0, int ri = N - 1) + { + if (li > ri || li > i || ri < i) return; + + if (li != ri) { + int m = (li + ri) / 2; + update(i, j, val, left(ni), li, m); + update(i, j, val, right(ni), m+1, ri); + } + + update_row(i, j, val, ni, li, ri); + } }; diff --git a/algorithms/structure/sparse_table.cpp b/algorithms/structure/sparse_table.cpp index 3d08456..8ea29f0 100644 --- a/algorithms/structure/sparse_table.cpp +++ b/algorithms/structure/sparse_table.cpp @@ -13,33 +13,33 @@ template <typename T, class F = function<T(T,T)>> struct SparseTable { - F func; - int N; - vector<T> log; - vector<vector<T>> table; + F func; + int N; + vector<T> log; + vector<vector<T>> table; - SparseTable(const vector<T> &v, F func) : - N(v.size()), - log(N + 1), - table(N, vector<T>(LOG+1)), - func(func) - { preprocess(v); } + SparseTable(const vector<T> &v, F func) : + N(v.size()), + log(N + 1), + table(N, vector<T>(LOG+1)), + func(func) + { preprocess(v); } - void preprocess(const vector<T> &v) { - log[1] = 0; - for (int i = 2; i <= N; ++i) - log[i] = log[i >> 1] + 1; + void preprocess(const vector<T> &v) { + log[1] = 0; + for (int i = 2; i <= N; ++i) + log[i] = log[i >> 1] + 1; - for (int i = 0; i < N; ++i) - table[i][0] = v[i]; + for (int i = 0; i < N; ++i) + table[i][0] = v[i]; - for (int j = 1; j <= LOG; ++j) - for (int i = 0; i + (1 << j) <= N; ++i) - table[i][j] = func(table[i][j-1], table[i+(1<<(j-1))][j-1]); - } + for (int j = 1; j <= LOG; ++j) + for (int i = 0; i + (1 << j) <= N; ++i) + table[i][j] = func(table[i][j-1], table[i+(1<<(j-1))][j-1]); + } - T query(int l, int r) { - int j = log[r - l + 1]; - return func(table[l][j], table[r - (1<<j) + 1][j]); - } + T query(int l, int r) { + int j = log[r - l + 1]; + return func(table[l][j], table[r - (1<<j) + 1][j]); + } }; diff --git a/algorithms/structure/sqrt_decomposition.cpp b/algorithms/structure/sqrt_decomposition.cpp index b84d1a5..001d768 100644 --- a/algorithms/structure/sqrt_decomposition.cpp +++ b/algorithms/structure/sqrt_decomposition.cpp @@ -7,45 +7,45 @@ /// Space: O(n) struct SqrtDecomposition { - int blk_size; - vector<int> v, blk; - - SqrtDecomposition(vector<int> v) : - v(v), blk(v.size()) - { init(); } - - void init() { - build(); - } - - void update(int idx, int val) { - blk[idx / blk_size] += val - v[idx]; - v[idx] = val; - } - - int query(int l, int r) { - int ans = 0; - int cl = l/blk_size, cr = r/blk_size; - - if (cl == cr) { - for (int i = l; i <= r; ++i) - ans += v[i]; - } else { - for (int i = l, end=(cl+1)*blk_size-1; i <= end; ++i) - ans += v[i]; - for (int i = cl+1; i <= cr - 1; ++i) - ans += blk[i]; - for (int i = cr*blk_size; i <= r; ++i) - ans += v[i]; + int blk_size; + vector<int> v, blk; + + SqrtDecomposition(vector<int> v) : + v(v), blk(v.size()) + { init(); } + + void init() { + build(); + } + + void update(int idx, int val) { + blk[idx / blk_size] += val - v[idx]; + v[idx] = val; } - return ans; - } + int query(int l, int r) { + int ans = 0; + int cl = l/blk_size, cr = r/blk_size; + + if (cl == cr) { + for (int i = l; i <= r; ++i) + ans += v[i]; + } else { + for (int i = l, end=(cl+1)*blk_size-1; i <= end; ++i) + ans += v[i]; + for (int i = cl+1; i <= cr - 1; ++i) + ans += blk[i]; + for (int i = cr*blk_size; i <= r; ++i) + ans += v[i]; + } + + return ans; + } - void build() { - int n = v.size(); - blk_size = (int) sqrt(n + 0.0) + 1; - for (int i = 0; i < n; ++i) - blk[idx / blk_size] += v[i]; - } + void build() { + int n = v.size(); + blk_size = (int) sqrt(n + 0.0) + 1; + for (int i = 0; i < n; ++i) + blk[idx / blk_size] += v[i]; + } }; diff --git a/algorithms/structure/trie.cpp b/algorithms/structure/trie.cpp index 626a677..d1847bd 100644 --- a/algorithms/structure/trie.cpp +++ b/algorithms/structure/trie.cpp @@ -10,57 +10,57 @@ template <typename T> struct Trie { - int states; + int states; - vector<int> ending; - vector<vector<int>> trie; + vector<int> ending; + vector<vector<int>> trie; - // Number of words (N) and number of letters per word - // (M), and number of letters in alphabet (alph). - Trie(int N, int M, int alph) : - ending(N * M), - trie(N * M, vector<int>(alph)) - { init(); } + // Number of words (N) and number of letters per word + // (M), and number of letters in alphabet (alph). + Trie(int N, int M, int alph) : + ending(N * M), + trie(N * M, vector<int>(alph)) + { init(); } - void init() { - states = 0; - for (auto &i : trie) - fill(all(i), -1); - } + void init() { + states = 0; + for (auto &i : trie) + fill(all(i), -1); + } - int len(T x) { - if (constexpr(is_same_v<T,int>)) - return 32; - return x.size(); - } + int len(T x) { + if (constexpr(is_same_v<T,int>)) + return 32; + return x.size(); + } - int idx(T x) { - if (constexpr(is_same_v<T,int>)) - return !!(x & (1 << i)); - return x[i] - 'a'; - } + int idx(T x) { + if (constexpr(is_same_v<T,int>)) + return !!(x & (1 << i)); + return x[i] - 'a'; + } - void insert(T x) { - int node = 0; + void insert(T x) { + int node = 0; - for (int i = 0; i < len(x); ++i) { - if (trie[node][idx(x, i)] == -1) - trie[node][idx(x, i)] = ++states; - node = trie[node][idx(x, i)]; + for (int i = 0; i < len(x); ++i) { + if (trie[node][idx(x, i)] == -1) + trie[node][idx(x, i)] = ++states; + node = trie[node][idx(x, i)]; + } + + ending[node] = true; } - ending[node] = true; - } + bool search(T x) { + int node = 0; - bool search(T x) { - int node = 0; + for (int i = 0; i < len(x); ++i) { + node = trie[node][idx(x, i)]; + if (node == -1) + return false; + } - for (int i = 0; i < len(x); ++i) { - node = trie[node][idx(x, i)]; - if (node == -1) - return false; + return ending[node]; } - - return ending[node]; - } }; diff --git a/caderno.pdf b/caderno.pdf index 6f3e97c4cb78c2cd65a23c9b20a96dbf2f81cf99..31252e48245ad63bc2ff1352b55c4eb533a5d77f 100644 GIT binary patch delta 176710 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�bHXRV8 z(3ePl9HWmUPlbWJV2;3b)LBZu7{6-ucxS=@yzSOfVa@aQC29l}^$~WDA#0bfTs|FC z<)0UN0%3!s8Z$0CiY)~|0b%H;Rl8W_Ve=|mm_zr|>_T1D>zqaa_)P1J-gcgk<31o) z52In$l^SO>#EVFzVlN|Stw|y!t)7=Q%$#0$U{j%3&6%m;enpM>Qpl&iuD6Ykf7dWK zH8ZtXt^OuBIAv&MDLGmFj?1CTiC>#5!+bVWRy-|^KrHQMR{{>W3Mb_LtoHU=HNdfE zZ0r608dVk^wiC&dKX2UscbO=0*$f$WhiwA0l#j0!nOW>-BFXqIeoz-zE%Vr^Od?<( z>;n?*BQ1nriu}w^d|~?u{w!0HQE3j|VDI=_mq;?|t51t50g(}`iIdERbS4b!cvWrM z?O-eIUHq??N3kI=@5^(F0JyDUSW-0J+yg&$?W)VCNx&X8nqt2(t!&(XR$ldUW?~<Q zi#qR5qluI_W={_8;87yJqapxL^`{_5G=Lx*>dplGP6Y6w_|sV@ufVM)Cw<c@Q-e%& zHlq3)LZZ^X4_OCnSRI`DdpHq)Ft=Zx;(g{(HW-eAlr9Fy#(Nt1pu2v&yLWVSb91!3 zx4W`3H#dTM*_SE4M2+pm;T!@QHtvVEUW+)<m7+`%q$it|qMF~dEj-N7L@K?^AFYKd z=zi96_z>;U(?r$i(^^67QcF0?@PGh!hq_jbegfXp{`_(%liPfaWA*gx-GlQ%x!Osv z9uA1kVkiP~0s2yIaf|&!cT^m)u1=)?McEv{CQrQ1h=~gV2GLRrmaGaqGy;h=R;&9k zfAq(E-%QyX`}Kh1I;fRmlwdapC7Bc@2%5uQKA%#pIt>rW(37La3tT>+88w%q=%f5; z%?>V9?yx2uVb&iS!3WEQ@iV;7o?)Dr?wN`(tvUw^4=7TNRxq28B^alv;<%1;gXzbP z&Lu((9)DHq(nZg;{?^qjZDFCTtUBdx!AZ_i#H&^zM;1C{mwo%XfzQxA0QhbIlyiU; zXj}@RBYnA2e1hDF3IlL$3B@*CDAWpcBG%jrn}QO6j)@0VxYv&IhUo~_u>2fVSIp5m zjW3{?rl4|FtsTj{O7eBWtKi$gC!vgMuxoRVmCvR>S8{}`s8Ix%{8>#uwK9TUPI@>A zH=bF?nI|MKuW~KY%AHLi10MpUvk{Kd#G1<wcIT?=TPYRLC?og_0$g*+IP}11FOd*w z6a;uxcfq3d^V6-sC7&8Pb9cK?kVlkK1b$#_`jdrEur@bG{iDR<LxWHAA34-6JI$Nb z-W8FxSdE)ryG_jNYEpcS+B@hYLNQ(}-*#%+l}-p)A?C|fk0-+Hvw>Znm(Ex?DB40n zkInw?NtEp%4KjWAu>d9t6y`PwM4RuL6Fs^N{3`8}&OlkDl?iWG1qlt-%W!`3w<aLJ zaP>@noT_V_QAe1}7u$t?d>N;xBiEBF-uDSr=?Ah{TCZq*bb@l{&76&xa4x`L>PoCV zCGde<#fa&W^{)-kM2%--^wEDi56oP+W22WSXA|~WaR;q5>)Sj13vLd%K@kz02WS6R z<0S<=k*Qx<gr#p$S9Cte&CsBP!YGht>YEMsjXiu_BkM(SgxXTe2jm9zq}fjZ^CC^Z zMU9GyfQF}n2djQ|l#*}By*~n-h;qp9kKWkP-CSNWLqSn#jD*402mJQem2S!A41A9v zt2TiU)k<wdSSK1i|DreI+GMBpUI9wWo)QyY*uEy+-n<9u4zv{?SRpZ@2Nn==hp%O~ z+GU4*+*{zLX@}bhy>-fRR|7YA8Z)tWTSbq>&->8%D`{nN`J_!oBT&!=Ia6Tb#V{a} zOS%bWbI^bow+iObpNPB+FZaOmg)p}0)^O{)2fqu6wZ|Lr)59jGHan0hL~Dv9zlS$c zJ{j*2DTRRHW)G2Y=h%Qa848%6a-qr}Exr($23;WKFA$8DRHGupnGTzbnVBA{ocMxH z7%i%#+f*v6v}H-fPw9eb6c{x^%BTdjdbcoyMc?_9_;K7MJZdcmCReKXA`K&b%KoOq zmvfW*#>+$Xg-Yt&mjMboRV!i-y16+eLb&HBdI5lPfW?Y3n`V!Zz64SX)QPuAr~(Wp zait<Hm8Cwz>DYhooGOnJ-i@u>=@^r~Ac6%f>6G1}cOU@Ei^<_Hl23QtOwDPbOn{!G zig!#W%TX=XbLEdd#>6bi6@7U|VdSYe@M2;<)|2B^u-AXj$k!r;T4-Y<yqaS~qrGU- zsvH7YRMH||^1Gu1?tnk6@8^IN|GHuV*(nW49>BPJy<7X^%O`d%Wn=Gm&@g3OxZJ|~ z7zR~6`arj2KA_?<X8klZCyoxW@4vg+pUUz4K#EX)*o5k5^71he^61CzC%T`bs3>WV zbAVRWJpwMHDJyPq-1(572b=^1^lKH=$dAvQq!9^e)(3+~xqzyHlQJnVN#0APMR;yI zZ;UEhZ>twnGM_r8_AYt4UZLB`e|*kH5u!KYI|g@Mzm*H`#pOv{`7dA5e)7a(G&iBb zyp&>Z@8_~$oc$?!`GvcU+UgXQmK)N~^Z|GGp)qP!MI6C4-O(Xlc7g0A@)Q0wBz&=8 zw7T~fq3h>^rWO#u=9cVtg2-Phg%G(lK`+<g#-%1XsnAn6yXEKlD@UWAJN-uR?##U6 zq-|BNEBfYIf$6-pwPg7P9{(6o@IncvxamBfQ^f@WatY?~i)uvbkyzWC-9L`c$w-6t zS!e%w7!0F?Sz6-(>4P9{`ky<%Pv3t@YA{m5b2lDh$IL*mNn6A5*wj=>vxzv3<r=r0 zwh{6`s7xdKy)&RlrC{-l?y(iS=GRnFdK=Ml=-cVW#@k<v++<ebPkmdIMT*V`w3>L7 z4skZnvERTe&4~jg*M||^)u6nxjVHaA*Qa|BzT!lrSs}|KUG#}6w7nt%fxN2K8`;BE z?}e*L%p+h8>4e91+kO<HN3sMgzBN**Ki!9)Y(x#ogpa$AYgw3;-suN&<LwIzR?^hX ze9@F71D+)*L|1rOWHEpH+1Wa`k2i1kQ=^3T0`iR>$QyS=zqYNfVbRdC4!d4Zu(eGz z8}`yf%ju7A-!27P!<8xFd%5+fzhcWF5@ipQrTM^=44<z4__vXnO@6a$X%S`tAEPqh zintwZuK#Uc%rD|!j>1vEq^D!Id-1C@-qdn4-uyA60?rMTm%=60rq3AL27=9o#rbQe z+~wuuxqvH5C2S2S)Sqjahpzg`O_)EHlEk(C<y0!0uM&|zDT^9*PDNh{tA+}2($DG^ z-Hrm+o65%CE9#g?xA|zltyKs5WyNevWmRp8U%6~JFr7V`CSKVlXfRj>4>mJQMoiX8 z^1RzWbVX>n`UU`=uT<TDN9|dI;IBoTIKX$NS)~cYWZKW%LW;%_9T=-k+&0F7qJ$cY z)K<j_|H3YMZ%#(_9IKCD6NO9evZyk&4`rZ<NJ|A6O;A==rBx<_hXGz_*xqyLpDFD2 zo7R~V^9X|wgCil2zX)Xzd}Ml-QO9dFh?WfU$F0jnxZbKvd&z6BSko<}VoTD7@2OP0 zbSQs$@DgFfWRi|)i)3d7N@)t~Qa%0!VD79kC3dd+!fhr!afzvJa$n<dpUWrws80jh z`40DmcRkmW%m(vrV7v&Dw2A9<gM^3&yNf=Rn?io35L$0#KnCphPtKP}6Ik`D54G%7 z7(KXIOT?{YyeDwH{J2po>y7GqTApX+)W3N4s>@sc$AxMK=Ss~gH;LAQ_FzPi;eWlZ zlbOP$<N%%}>+dxt?6cc{cW_^T5rhKYr#?=7Ydhjgi<Te5W@;vOf9*Z9<BgXeTw@7t zbcw`4#m>RvE-XBhd)?=}HRXuDJt{;`i+FpqMDP@XVB;Lr0E)zeYi8DZ<+<W@^tLOE z6_g~vFZjAYMYbpf^kAiP)l};CMrH-mX`qo?9DandN2r_o&w}khlP>o)k}Cs|gOM95 zqvYQ#yd&E=962^djCe!Vd>XD!L7kt_sjl@=2rK=u?;x2wYCr!(OvVmtEVruS37+ZU z<@IYUa~yFxJ#S!6<=%AmdFJ}_*Ku}}f|iI?8e?;aWtw=AEDu`=hMwd!?7}2$4TbIS z85d!F%oDc#ndmyXK7I(Oc|!vt34Z<h#ar~n^Y?e=#i=^4U{d|%IZgEWA5ks2Rcz1I z90HnfOZ@JHcp*ZTdgt#56t^?wM;_4H8~rfwVuv@0fqmamWa0x>1nf`9X^|gR-}FT$ z&Mb+~j>92kGzR|4XV`k_DGA;|q@;yp(l}yvL^<&?oDtWU8BKLWzE~$f3uWSx<_^=~ z1!Z^GH9TBqIQ9o>rGWQ~x<EPuV?(=ENPKn0aM<=lJ`>MekVQaY)W4Q-M#of<DJy+k z1NI?0VS%BkIg=iNAwgUIlg^iBv`T?c6l+Mn&P{Y)nTs<@ii0b;k=aw`FM>s@^WO&F zVPcZRxwexNYg*H4=7;D&bC^A{_5hXEO#=nHB)=&d=HgXssNZQRMaBbqwa;9(Y6y28 zh*ORs(}RYrfzyLVh!<PSUp%nLI*<EXTq<ZzyblpPIjN$aTr<P4Ttayi0L4=a`x}=* z4uEqkwLy@JWb>p8f*^Qp@p{N0ah_SX?CRs9kycz`r=vXR)AkK;&T-w|hISl7^HYY( zBLeQr2}OKBCNoDRJtM(6*1MX*AiM$gtV{Q8L_B+R54#T0D+obPH9f^QEL;L=TXGRU z5_UluHds$I<9dUA+HVfa@D#&X$N>LZEVY(dG_i9pU@bN_;$Gw;+{)L&2QY?;ikp-X z@-qW#KqVf)Xd?oAw?GrsU!VXhuuPsw%mN3;G2BU&d|BC*fry|2q-6SIS5ZDHy%Ijw zH+gFg@p$Q(?ge^oJ+TEbYmH5p(OD_tL)XGWBSzjiVsd8pdOi(gbn`(-6Syd~%&T(i z)tm-DR8w`*O9wzeLJblxlA3t_b+d`+=B`qgBrWE3kp~5`99CAKDxvM>)Jl59#05Ds z0Ku#fZP2z!J8u@oVI<SaV5ddUyP6b?sE_h7#-o4QjY~1u`ahcLY!=(f+!EPUfISWN zo@IYLJm{*ux}i<FPmbq0kLNNroZ}cc?9w>+a*9!s|MTEcGbN@uD*1v%W#Et=kHN(K zB>~eL$?OPx!D*}UsR%Qz8rJ5Q$6?*@Zw<guULd|UAJ~V3=5>_SnpRl5Zt$f&Inj1B z35$0@`K(lN#rMs0P6R4Cu-8WNF5w(#(Indl5ALXRr)o0}G5XWnCTHYQ*nmmfdHDz$ z;Ee8hYJW1|Z1SsYeRiE0*?OMGN(;#2qO>X<so(-PJjz-+9*a-N2T0!!5(L^f?Vq1u z>;y?4E(&HC4T)7!LOvirUT@CvYh)UB4Sr3filjbd{GBLWwBP-u`qM~n%DO(|eqxO4 zUav#1BRSU{Ta4%(W2vj;EXN5L(O8Est+doxnl@Cf9`U-+psQ(+n^wDrS-thga2{9d z0eP1UR4fl%yr@4u*Jx};z+-1Xc#20iJ;i=%TymCE`{A>ffVT7Hzt{$v<$pjUYuXO= zKcQ)|j{P5|pCP;Vv|UJ&S0a(ljWQu5j?}d3-7s_4J)vuL34IZXw|%_^o8}ABv`r~x zFX?wvcNwPQy8<oyvdiB16iC^&E*b_K%3)Efg)rhpzx4EHHXiJ?X{$pmo`(cBI=0Sp zx9L|Vo6Fz4v${Br&I%vmU3o2Q;!<9v9esgo+w$Lt?)L_rH-ZCct8%^!vO|NOzRJYz z=5A`hhW2k66OIwPk#xp8l~z5qEJ_T1hnXv+S#kRF#!el~XemNmq)4O`CHe?cZ%XcP z<I;)-%D>-}jqKz2JNljad8@~YP>a;K_BM4Fo0S?qgweY?C7Tm?^t;LytSxD!+?K%K zp?5^H84FN4YhL&2+3dKTQMD;C>YtA-;0Ba#tKyAo&Jgv#s$EvmO6=gAm-?4*`kXoR z)_eKp#6M9_xS9n)YzJ=DibcvkRGMlO*;+%m6pFSM2a-UBnT?sL0MQnqnqb1{fTjmD zMxog;SpcnRU?Oxqe6U|2^k<?(yb!PyM9LI}pCoBUPG~8>Mf&F%8Og7ufaCz>SYA3n zu`?J+jwrRokBNA0C_pn&;5k}Pu_ArAB;_M%j%d2{8+>4AAhf$=K6%i&3uK@b0Ad-& zEURD7yASo6D8eBOOWw3iL>51vNBkL{hkQ9W2s`&DD19QdHVYpym^K-52PH5)Qs^0? z5&bmHC=;wPMf8@gfMzaHQLv5dP8M1@G&3<7If2C`tvEW|Cjb>iUXqKLc^ck1ZH_wP z6gxOCk%A)BoI<-@nmLYwdq@78qXTpOs%W-aNq=Ld2EMoH!_0xVfaT4(mfiJ0{x!}Z zd{Eo%p$GO0Y&9d4?f-$s)+sjd(MwS7|HwU;b#$CJTTuL-Yx_)i@uS)d%y@F7@H*YB zxyuiRr1-oPZ7Al;>Dm*wlClkeJ&=qf)JiF)+?FG$5P^L=b-N58fr*Y3nzyph6kTS4 ztWtuR)G^Y-Y<|T?>JSv{&JPC}?qx1?T)n@^I&fyt-elg`PvL1`Md3dKBVAuyWx0SK zR!vCatn}%J57z0)7RBsI(y!fP@&UCb3xVMYdt~IS7B?lvBTT~~=BE`9#mu?X*buC- z)aYc5C?s5P0T~T5S6Xn$c<1wsT*EdX)<N%v)blW{O`+2ALTK3Otg<@)cHtPzd`=Z= z>;#WhH-sNaodn{Tn>Et;7(ulDB?MUZLzaI-tK;e60!tEmlwBkRrq0kG8t)3MqIks{ zv_(y~9wY%R7zVLWimDQ;!^ok{--aQdC__b2A-}mX5f<wwRA?aXn8?8}{e5C5Kh}t~ zB{Lftu`3E0PBa~a$4{6wCMuX81HxD`kkMr!zQIJ&co@i{I>L|%^(sCJLQKFq;&HO} zsGtHN!0penNIYsknZlwmT(kuBp-dl9&1-C!<8t(E%zkCsC8>hXTq1@3u|7Ldr1QbN za01_?XDZNDRBa`DMe>fB#K}VSkTrs2c1q4rkwPRJhCK;k+=8dzf)-O_C-A0QRbix} zJ=#EcBlxa9C3<cuH3)dlj6Psuh!ipH{)^}!jR#qMt3z6M9?)!jIIT08obiqD&X<W` zdSTvX0?ol~Ch^{drzcPMw~9Z5y31k~;QQ=_wR3>oGvPFT6k;*K;Sa%lhCj%C{VQXy zD56CEgfXZ{6|1lWNcnhFBwaST5nI|nN9pmGw_iNqwTHuvq>`C_xdA{4dDrr-+tkv% zk9o3Pb@4``qBouu_W9@g29mbJUm~{?lMWT}Y4niYg;is~zZ?Nww2Zt1U*J>3wu^Ym zf`!~G^?+ql+zb;P)L=-|HhZJM$eMejY9vnKFm1D-3ftq-tpx%r;t#63n5%k3w2Br_ zCb}gsx}~ClLfgyAr!wG1Iar#+V2E~Kh|?|?n++kse5i_>-P=TJ%RC&`d|YG#`^O%j zrF<l1L4I??43t+JINPFi&Y8m2T%CcjSHc;bwvRNrnmUjL`OW!9DP-3n-Wps}E?G^Y zmSWn9q#XW5#C*sM6iyt7%3BTYpDHCmzs|?zkO^7Kx!ZTq8V-cc#W<=o!{H6jb^}#Y z|FG`<m7_{xS>I_K+FPBo6__(sv|*{@-NdCg?O2geY1|vOF>(jF`2w^ytr6SC=oDBZ zfJ=AU#ZzJLvT15sUx9|R96P%KWkS*)Z4Yrd*m~x8L(-pn53%L$J!{E+`--Up0j(um zhNfreHskArtpkeM-$YW#YNY>wR^^Q-WI+*QoY>G8Ge<es;_1$XzcxFNa`Rp39nKj% zD5Csr59GPZjkA9z?F8ofbrC+5kJo)8%fwY(El$C|i(|Dgo&n-YVw^y`4Z|oGts6wT zWD(!oN6+>Seq;ZQGKO(1$*R|IV!1$qT2&Ay45N0D(+AEhY_8rV0RB?k6sL@75+H<@ z8xs@W2PK)C#wmht>vG0-00pDcRACmviZ1S^4IhyC?E8RB?+w7I#NVHmna%dgyr?gw zNH8OZgc=WZA?d>NQFoQ|ATBBxhk~$R3FQ=N<_I$}fWO>i3}@7emcfiFYnP@EMtHvP zzEF$nhd{XZ{qgA+-#1d3Tm`!Yn6pojg6BB0#qDjT?h?nnLxV#J?JPv@?B*`i!XRE; zp2HaR$=C??^j4nDJJ0nWVX3$LSCBZSyImhatFEH2oiBQ}Vu*D3HWz`znF(8JmL0*U zxbRMK6jK%`vL9Tsmuy{KZBGujUDySEQt0;27C>ak=TU!ZVZ76Y(M9mSvB8PJU-{<I zW4R7WBo<9EdR}aDU@bpA=@MzT&y}QuQ4M?cx~aX*A^4l07E-$;(K@Qn3Md8mak^xY ztyW0GW=@MNByk{&=v{WG59!W4x7DPYFbNm*ewl&HCu%XkeU7k<!6G6q)nVq1|LTg& zDg!2wF=NwG(n*DvDK=5^CwEPVE!W$$Md#^%^h`kNGPdFM`fgu+ske1}hwT+6K>egR zMb=s4Y8y-46IS|7-xBO)bJrP3Uv0%Wf`M}yvPZ(T%hS=6)g>U^k3LVnCK1kXi_*vU ze%vf*t{Vnc;VdAYHGxmf`v9-`H&(nw%>sDbel<q-?v$HG75c(Lwfr5ujL(CRPc5Kz z4r(gFA^uZskor`M7@(sSz^ko1$0}Y>je_{+2fEO<mE5DSD^<M3k_Dz^r%+Q65v=}E zlU^80Hw?jN%n(EX$yVVLh`q$|Znh#u=TRXoN&5?buSSXLP3Nlt1#a*ZG(B$F@h(tA zOW+~y*ubqi724kP_@%qdC8UsZj_R0%u*fjl3+>Q{FCH+eVVqd+h_Pn^PdC_FvQZVl ziafz0KSEWl#dw@lpAPAwg=?&O%%N{pJ8^rB0AqXLN|jZMX}Oz?_vLu^j`yT6I+(S> zt!wxmxhRDrPsyEJ9ipYXGEh|=tOYz@<_J?s;i`0HpMkx$4p4V!t(5H4y&^Z_5VW6z zZZx`J+BCj-dzoX7;~QJp&)k;K!bswbi^w_|mJ{TsI8ptRO~)9D5y<Za?bRHZtDdsS z@8#v#9Khxnn~M3^WpN_bTT;5IWzPTMYT!OAZ}9nW{`qO)wu}GI?hRWu)dU#d=xcOv zM@3*>>HIOThVIvQj_0>z&iw&h0{I4C>OuZ?I+a>eq)?_;P^)+L3%W_>C)E@Mbn@M~ z@yEq@qusY1!?G6(d%qT*bVu~)1_5Yx#s2RxFoSvLRevk+7B|xDOwTeVBSiUi9QMoA z6+c`&LVjLfZ!cxnycFxyT3FzrF=G{k(;9lbhDA5T`0I`i{`l+h7Ggq|6;-C<lQUK4 zsQ+J#_1_X<ei|iG_Ub!`4XI+Q&by0^i@Q7c8n!C}$W`w(HLo>0BkpI}Hl6ny9rx0W zv?sQUo*5@^zj80!uG*`M<{UQvh>~x$tljUFZ!V}e=iM}WM#s(9=pF#)<QIHG%?{jT zTJl0mVk0IolCFr#U+!FZa@_LHJYD9Abs&dF);V0%mmC46dObEy&WQS|l03MPRt9dd zaAZ6(^6nP&O4niQHua)?^JFISCAv&v(#dO<%$V;m2C1tebHiu*QH!g?L;7QCwA9*F zSEE5!BlDptPLC<c)&@W+rCJO$Bc+v&MCFQD5_0#DLX7S-f5{ATq6r0nU1PFUqX#(M zu-4+_3qv32(2I@WMl$Q~wu8u$O6H>$kZ$2b?qUkU<nY^v1)-fn%|?|dA7eC)PjTju z6hq`m{44q?N|^*wXe#v9Vv>2jX+_2`nV>eYo}BH8mZF4{E@dEOQ@BvBngu=<@6n}X zp(G)JM4qt(&%%UTQ3<1a5wk(@vw?9KJRp1ZuVN1>g2>N$E8nrB)8SW_8m#Wz{<C2$ z>J#3D1Or4lWjR&b)Ei0j;6I2>&VD`bc$3yMN4f61IfSXP!{3(g*mli~XP>C_f1aH2 zrx&U>{ElrmXDfiN?^<PZAonvI`J3zpf#%&dP}=sr;N1h4a+00g#aBgu4bo98R9H#x zmmIZ%slW$1askGec=d;wq%^UpQ@>z(#llrjCrMsYyI-PJg$f{44V%ad0fxVYeL9L^ zlt_}}#TmUi$DG0}Q>W~Y&QMnSUmCo{nZ1WhUB{<9aqWTD#kTm1p1HgtpcW*#;2Sz# zY^9BerC_Jon(fcw+9c}Lad&hZ#Nce$iIU*$#2eKhE+dTKY$^B}^QGJc(5KOgKmN!r zvESb<PDU93D?Jt~d@c{b$wY1phJC8eUp1@8Mo*Vh<7~YJR!R|#s@+rL(k{B;d+o6O zuAW}ohW`K&ZZRmg84uoFc%g21dhVX4*DD8;@(??=QTug#z*viYy^2)lvSN}GH`2J9 z;~7rPmWiK27<9o<x4jevUzYL=KY)hg+rRtcoRJDBGbTrk+J)07!z5~R#X>HfeElnA z@ueu^-HQ;9No~*nJ-U=K;&V~t4l%Rr+tF*Ht(d?Y{cOTqv2CA8P2vi(iFvornvscC z8g~#h<NA?A2AP??3<r(WE;Fe-@*6FunD4tQdWO9ZLQSw@zsMi23Qgnj<gN282Nv19 zT#r}?-^MUax#HHJ2toCSGTUZWs9E^gE(#2>hK<gfW-R*Y@T@Um={7y!CE5t7Y83x8 z0r5a5zCeF>7ci@Izx1PFsTE_MO9i8<_1{vF;*H<27aUAkYkQ~Dlh?11>-p2R$@E0m zFLpM2HkAlF3U8~x(ni^nhuU`mJmOCu{>$AOj`8hV0)1wDpPI}N@^2YRgo8G@Xy=cI z!`l}mtdpZn4kXZ0VIP=0eVONFb6?YnY9`>Xjf34QLl?nn+9oB4kI&2P&A}6;f|dQy zNhqEt%2TdbxXwArRwS;00q@K%<0>fNbJ*D_j<FwB>}Zlrya_YmVVN&7e7H4_6fzpc zXI8%}P?I$Z-Fg~Ll%19HUXPU&^Iwxy(pfZG{$T&OWv`PXcUy*U=E(Co=kboDJc8zN zC}+l^z;rh6l|JTW&`!2DsV`gmB!&A_QRURIt~&$gi9XVh+;PXauEtgDkw|&ldbTV7 z7rWMG2(bqGN<l@-Mz%X?7h4A7i;mjWtHV1<@h9P%7P`!TYYz^L5Hhq}%xwQA2P+Fb z6DuVX6D2hfqny2|sFBMrA}UcH7A6)ZrvJO7^_USt08CtjNmN8!jGcu|OiY}Ui&L1L zm0MUCzy=Uu;TC0L<z^Nj;`{$E(MwA>1|tHp6A1_q{qKNvc5(V;WDD!DLB1fPprV8Z zxz|0@E*5F*y9X|&1E~`!1_@DxMo3ilB3!9nEhYwq7(;6Ehcs3$8V3Ae2!fO~?6gnN zun=DHJBV0-$G<>nRy)UM{i4b@X>-xq>}fV*7yxf3H*yBXEhC>0(Z}|)xfiH@5fQY! zs}`LAo%&Ma5sgP2CK)hWkxsTM#i%8IZrJ{Abx=&e@uqh7LrWgVFiFs5MN++wfKOdE zKIPvp39U9^*%aO8sc2>;k-g4dYuNQ)Y&|`*JnsmCDgV#f&%b63$YWhfTe2LWq=abh zN%X~#ZOf&NS!7ZzU~xZOT4I33{%Nd{)uy~mI=|b3nn3dmsLdpCG%eJp65ZM~#Td&c zccggslufk96XYA<7+NhHa)yO8iZ=L*qg;{*8Zc|#Wi-#Q5u@ELYU3V~e907^l0e&x zDK63TASVQy`6LnJgB(&y6lIgaXW^`nl89O0Ia3gamlpfB2%AYwlktEdSqdS>Us8J- zS0iyr%ua#X!Ig-iEj*|%-V(IG$FW%u?QakW)`ceHH=K(lX9g)z3nT^L4=1e{6H$DK zt36<Pn)1(BKDswr-5|fN3QJi&wru4z_JNF+6+~92?4qAH4?t0}&@x6{^JM$x@3v26 f;r~<`{(I2B?9!syAdulWI60YN$;rhO#9{vr1B}51 delta 174824 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≪6z_Z}joPg49W-*B;@td$hZTg>lPZ~rK++=QKF*37ui^Y~{ykz@7wV7r( zS&_Ll!CY@c52vRq+*H~(+$?>sadVn|(V11f(-?^7v+Cj<s*wfW=aF$}bb3BR<eqp} zpM`Q$Ky8Gt#E}G%2!E|IlgA^P!D!E2LR<y0;a$#gneD~I0luP7Sw1?qnR~I=CU;-P zn<gr!?ybtKUS+HjvwIjwFY=OnP_`2BQ|)b%4ChZ_8hwJrnQJCQc%EuyNBgOY{dD=a zI3mYd{}yPFyA1+K_9OJKU!wg;?m)@e`u4WrI7EB+It!KL`+rQ%Rl^+E_&X}U%2$vf zsmNJf@oviO`>)AEnsm@Hu;^u`GRDl9me7p?JH4K10Wm9KC8?J(!+9WBXw};MI@uIs z8k??+-CSYxhMp#!?fNXnDjmjm&4Kk#aBwc`X<1uQ7{sXHi^Y~M1(EU;vL$gqxJA6s zD#7arY_c)S2!E^yVNR<G2)SPi2*XI$142;+)Emu{i-;|%0Dji0)~ZN%hKrRC1#IR? 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%0A6VH1|Nzbb=c+6{wGCch)%)qIHgv*rOf|;jJ2I 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 JS#>$&{{lcGJSYGF diff --git a/contests/Cadernaveis/BALE11.cpp b/contests/Cadernaveis/BALE11.cpp index 2dbcd8a..89f65fc 100644 --- a/contests/Cadernaveis/BALE11.cpp +++ b/contests/Cadernaveis/BALE11.cpp @@ -27,33 +27,33 @@ int v[MAX]; int tree[MAX]; int query(int idx) { - int sum = 0; - for (; idx > 0; idx -= (idx & -idx)) - sum += tree[idx]; + int sum = 0; + for (; idx > 0; idx -= (idx & -idx)) + sum += tree[idx]; - return sum; + return sum; } void update(int idx, int val) { - for (; idx <= MAX; idx += (idx & -idx)) - tree[idx] += val; + for (; idx <= MAX; idx += (idx & -idx)) + tree[idx] += val; } int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n; - cin >> n; - for (int i = 0; i < n; ++i) - cin >> v[i]; - - int ans = 0; - for (int i = 0; i < n; ++i) { - ans += query(n - v[i] + 1); - update(n - v[i] + 1, 1); - } - - cout << ans << '\n'; - return 0; + ios::sync_with_stdio(0); + cin.tie(0); + + int n; + cin >> n; + for (int i = 0; i < n; ++i) + cin >> v[i]; + + int ans = 0; + for (int i = 0; i < n; ++i) { + ans += query(n - v[i] + 1); + update(n - v[i] + 1, 1); + } + + cout << ans << '\n'; + return 0; } diff --git a/contests/Cadernaveis/CAVALOS.cpp b/contests/Cadernaveis/CAVALOS.cpp index d340717..80dcfef 100644 --- a/contests/Cadernaveis/CAVALOS.cpp +++ b/contests/Cadernaveis/CAVALOS.cpp @@ -30,74 +30,74 @@ int graph[MAX][MAX], rg[MAX][MAX]; bool cont[MAX]; bool path(int s, int t) { - cont[s] = true; - if (s == t) - return true; + cont[s] = true; + if (s == t) + return true; - for (int i = 0; i < N; ++i) - if (!cont[i] && rg[s][i]) { - par[i] = s; + for (int i = 0; i < N; ++i) + if (!cont[i] && rg[s][i]) { + par[i] = s; - if (path(i, t)) - return true; - } + if (path(i, t)) + return true; + } - return false; + return false; } int ford_fulkerson(int s, int t) { - int ans = 0; - par[s] = -1; + int ans = 0; + par[s] = -1; - mset(cont, 0); - memcpy(rg, graph, sizeof(graph)); + mset(cont, 0); + memcpy(rg, graph, sizeof(graph)); - while (path(s, t)) { - int flow = inf; + while (path(s, t)) { + int flow = inf; - for (int i = t; par[i] != -1; i = par[i]) - flow = min(flow, rg[par[i]][i]); + for (int i = t; par[i] != -1; i = par[i]) + flow = min(flow, rg[par[i]][i]); - for (int i = t; par[i] != -1; i = par[i]) { - rg[par[i]][i] -= flow; - rg[i][par[i]] += flow; - } + for (int i = t; par[i] != -1; i = par[i]) { + rg[par[i]][i] -= flow; + rg[i][par[i]] += flow; + } - ans += flow; - mset(cont, 0); - } + ans += flow; + mset(cont, 0); + } - return ans; + return ans; } int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n, m, k, cas = 1; - while (cin >> n >> m >> k) { - mset(graph, 0); - - N = MAX; - int s = 0, t = MAX-1; - for (int i = 1; i <= n; ++i) { - int c; cin >> c; - graph[i + 120][t] = c; - } - - for (int i = 0; i < k; ++i) { - int x, y; cin >> x >> y; - graph[y][x + 120] = 1; + ios::sync_with_stdio(0); + cin.tie(0); + + int n, m, k, cas = 1; + while (cin >> n >> m >> k) { + mset(graph, 0); + + N = MAX; + int s = 0, t = MAX-1; + for (int i = 1; i <= n; ++i) { + int c; cin >> c; + graph[i + 120][t] = c; + } + + for (int i = 0; i < k; ++i) { + int x, y; cin >> x >> y; + graph[y][x + 120] = 1; + } + + for (int i = 1; i <= m; ++i) + graph[s][i] = 1; + + cout << "Instancia " << cas++ << ende; + cout << ford_fulkerson(s, t) << ende; + cout << ende; } - - for (int i = 1; i <= m; ++i) - graph[s][i] = 1; - - cout << "Instancia " << cas++ << ende; - cout << ford_fulkerson(s, t) << ende; - cout << ende; - } - return 0; + return 0; } diff --git a/contests/Cadernaveis/CF342E.cpp b/contests/Cadernaveis/CF342E.cpp index 746231a..382794c 100644 --- a/contests/Cadernaveis/CF342E.cpp +++ b/contests/Cadernaveis/CF342E.cpp @@ -1,190 +1,190 @@ /// Xenia and Tree #include <bits/stdc++.h> - + #define MAX 101010 #define EPS 1e-6 #define MOD 1000000007 #define inf 0x3f3f3f3f #define llinf 0x3f3f3f3f3f3f3f3f - + #define fi first #define se second #define pb push_back #define ende '\n' - + #define all(x) (x).begin(), (x).end() #define rall(x) (x).rbegin(), (x).rend() #define mset(x, y) memset(&x, (y), sizeof(x)) - + using namespace std; - + using ll = long long; using ii = pair<int,int>; - + #define MAXLOG 20 - + vector<ii> graph[MAX]; - + struct LCA { - vector<int> h; - vector<vector<int>> par, cost; - - LCA(int N) : - h(N), - par(N, vector<int>(MAXLOG)), - cost(N, vector<int>(MAXLOG)) - { - init(); - } - - void init() { - for (auto &i : par) - fill(all(i), -1); - for (auto &i : cost) - fill(all(i), 0); - dfs(0); - } - - inline int op(int a, int b) { - return a + b; - } - - void dfs(int v, int p = -1, int c = 0) { - par[v][0] = p; - cost[v][0] = c; - - if (p != -1) - h[v] = h[p] + 1; - - for (int i = 1; i < MAXLOG; ++i) - if (par[v][i - 1] != -1) { - par[v][i] = par[par[v][i - 1]][i - 1]; - cost[v][i] = op(cost[v][i], op(cost[par[v][i-1]][i-1], cost[v][i-1])); - } - - for (auto u : graph[v]) - if (p != u.fi) - dfs(u.fi, v, u.se); - } - - int query(int p, int q) { - int ans = 0; // * - - if (h[p] < h[q]) - swap(p, q); - - for (int i = MAXLOG - 1; i >= 0; --i) - if (par[p][i] != -1 && h[par[p][i]] >= h[q]) { - ans = op(ans, cost[p][i]); - p = par[p][i]; - } - - if (p == q) { - return ans; + vector<int> h; + vector<vector<int>> par, cost; + + LCA(int N) : + h(N), + par(N, vector<int>(MAXLOG)), + cost(N, vector<int>(MAXLOG)) + { + init(); + } + + void init() { + for (auto &i : par) + fill(all(i), -1); + for (auto &i : cost) + fill(all(i), 0); + dfs(0); + } + + inline int op(int a, int b) { + return a + b; + } + + void dfs(int v, int p = -1, int c = 0) { + par[v][0] = p; + cost[v][0] = c; + + if (p != -1) + h[v] = h[p] + 1; + + for (int i = 1; i < MAXLOG; ++i) + if (par[v][i - 1] != -1) { + par[v][i] = par[par[v][i - 1]][i - 1]; + cost[v][i] = op(cost[v][i], op(cost[par[v][i-1]][i-1], cost[v][i-1])); + } + + for (auto u : graph[v]) + if (p != u.fi) + dfs(u.fi, v, u.se); + } + + int query(int p, int q) { + int ans = 0; // * + + if (h[p] < h[q]) + swap(p, q); + + for (int i = MAXLOG - 1; i >= 0; --i) + if (par[p][i] != -1 && h[par[p][i]] >= h[q]) { + ans = op(ans, cost[p][i]); + p = par[p][i]; + } + + if (p == q) { + return ans; + } + + for (int i = MAXLOG - 1; i >= 0; --i) + if (par[p][i] != -1 && par[p][i] != par[q][i]) { + ans = op(ans, op(cost[p][i], cost[q][i])); + p = par[p][i]; + q = par[q][i]; + } + + if (p == q) return ans; + else return op(ans, op(cost[p][0], cost[q][0])); } - - for (int i = MAXLOG - 1; i >= 0; --i) - if (par[p][i] != -1 && par[p][i] != par[q][i]) { - ans = op(ans, op(cost[p][i], cost[q][i])); - p = par[p][i]; - q = par[q][i]; - } - - if (p == q) return ans; - else return op(ans, op(cost[p][0], cost[q][0])); - } }; - + struct CentroidDecomposition { - vector<int> par, size, marked; - - CentroidDecomposition(int N) : - par(N), size(N), marked(N) - { - init(); - } - - void init() { - fill(all(marked), 0); - build(0, -1); - } - - void build(int x, int p) { - int n = dfs(x, -1); - int centroid = get_centroid(x, -1, n); - marked[centroid] = 1; - - par[centroid] = p; - - for (auto i : graph[centroid]) { - if (!marked[i.fi]) - build(i.fi, centroid); + vector<int> par, size, marked; + + CentroidDecomposition(int N) : + par(N), size(N), marked(N) + { + init(); + } + + void init() { + fill(all(marked), 0); + build(0, -1); + } + + void build(int x, int p) { + int n = dfs(x, -1); + int centroid = get_centroid(x, -1, n); + marked[centroid] = 1; + + par[centroid] = p; + + for (auto i : graph[centroid]) { + if (!marked[i.fi]) + build(i.fi, centroid); + } + } + + int dfs(int x, int p) { + size[x] = 1; + for (auto i : graph[x]) + if (i.fi != p && !marked[i.fi]) + size[x] += dfs(i.fi, x); + + return size[x]; + } + + int get_centroid(int x, int p, int n) { + for (auto i : graph[x]) + if (i.fi != p && size[i.fi] > n / 2 && !marked[i.fi]) + return get_centroid(i.fi, x, n); + return x; + } + + int operator[](int i) { + return par[i]; } - } - - int dfs(int x, int p) { - size[x] = 1; - for (auto i : graph[x]) - if (i.fi != p && !marked[i.fi]) - size[x] += dfs(i.fi, x); - - return size[x]; - } - - int get_centroid(int x, int p, int n) { - for (auto i : graph[x]) - if (i.fi != p && size[i.fi] > n / 2 && !marked[i.fi]) - return get_centroid(i.fi, x, n); - return x; - } - - int operator[](int i) { - return par[i]; - } }; - + int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n, m; cin >> n >> m; - vector<int> ans(n, inf); - - for (int i = 0; i < n - 1; ++i) { - int a, b; cin >> a >> b; - a--, b--; - graph[a].pb(ii(b, 1)); - graph[b].pb(ii(a, 1)); - } - - LCA lca(n); - CentroidDecomposition cd(n); - - int p = 0; - while (p != -1) { - ans[p] = min(ans[p], lca.query(0, p)); - p = cd[p]; - } - - for (int i = 0; i < m; ++i) { - int a, b; cin >> a >> b; - b--; - if (a == 1) { - int p = b; - while (p != -1) { - ans[p] = min(ans[p], lca.query(b, p)); - p = cd[p]; - } - } else { - int p = b, res = inf; - while (p != -1) { - res = min(res, lca.query(b, p) + ans[p]); + ios::sync_with_stdio(0); + cin.tie(0); + + int n, m; cin >> n >> m; + vector<int> ans(n, inf); + + for (int i = 0; i < n - 1; ++i) { + int a, b; cin >> a >> b; + a--, b--; + graph[a].pb(ii(b, 1)); + graph[b].pb(ii(a, 1)); + } + + LCA lca(n); + CentroidDecomposition cd(n); + + int p = 0; + while (p != -1) { + ans[p] = min(ans[p], lca.query(0, p)); p = cd[p]; - } - cout << res << ende; } - } - - return 0; + + for (int i = 0; i < m; ++i) { + int a, b; cin >> a >> b; + b--; + if (a == 1) { + int p = b; + while (p != -1) { + ans[p] = min(ans[p], lca.query(b, p)); + p = cd[p]; + } + } else { + int p = b, res = inf; + while (p != -1) { + res = min(res, lca.query(b, p) + ans[p]); + p = cd[p]; + } + cout << res << ende; + } + } + + return 0; } diff --git a/contests/Cadernaveis/DESCULPA.cpp b/contests/Cadernaveis/DESCULPA.cpp index 3996dc2..a23e095 100644 --- a/contests/Cadernaveis/DESCULPA.cpp +++ b/contests/Cadernaveis/DESCULPA.cpp @@ -1,7 +1,7 @@ /// Pedido de Desculpas #include <bits/stdc++.h> - + #define MAX 1010 #define EPS 1e-6 #define MOD 1000000007 @@ -22,31 +22,31 @@ using namespace std; typedef long long ll; typedef pair<int,int> ii; - + int dp[60][MAX]; int v[MAX], w[MAX]; - + int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int c, f, cas = 1; - while (cin >> c >> f && (c || f)) { - memset(dp, 0, sizeof dp); - for (int i = 1; i <= f; ++i) - cin >> w[i] >> v[i]; - - for (int i = 1; i <= f; ++i) - for (int j = 0; j <= c; ++j) - if (j >= w[i]) - dp[i][j] = max(dp[i-1][j], dp[i-1][j - w[i]] + v[i]); - else - dp[i][j] = dp[i-1][j]; - - cout << "Teste " << cas << ende; - cout << dp[f][c] << ende << ende; - cas++; - } - - return 0; + ios::sync_with_stdio(0); + cin.tie(0); + + int c, f, cas = 1; + while (cin >> c >> f && (c || f)) { + memset(dp, 0, sizeof dp); + for (int i = 1; i <= f; ++i) + cin >> w[i] >> v[i]; + + for (int i = 1; i <= f; ++i) + for (int j = 0; j <= c; ++j) + if (j >= w[i]) + dp[i][j] = max(dp[i-1][j], dp[i-1][j - w[i]] + v[i]); + else + dp[i][j] = dp[i-1][j]; + + cout << "Teste " << cas << ende; + cout << dp[f][c] << ende << ende; + cas++; + } + + return 0; } diff --git a/contests/Cadernaveis/EASUDOKU.cpp b/contests/Cadernaveis/EASUDOKU.cpp index 70af254..e945d08 100644 --- a/contests/Cadernaveis/EASUDOKU.cpp +++ b/contests/Cadernaveis/EASUDOKU.cpp @@ -25,58 +25,58 @@ vector<vector<int>> mat, filled; vector<int> init = {0, 0, 0, 3, 3, 3, 6, 6, 6}; int check(int r, int c) { - int ans = 0; - for (int i = 0; i < 9; ++i) ans |= (1 << mat[r][i]); - for (int i = 0; i < 9; ++i) ans |= (1 << mat[i][c]); + int ans = 0; + for (int i = 0; i < 9; ++i) ans |= (1 << mat[r][i]); + for (int i = 0; i < 9; ++i) ans |= (1 << mat[i][c]); - for (int i = init[r]; i < init[r] + 3; ++i) - for (int j = init[c]; j < init[c] + 3; ++j) - ans |= (1 << mat[i][j]); + for (int i = init[r]; i < init[r] + 3; ++i) + for (int j = init[c]; j < init[c] + 3; ++j) + ans |= (1 << mat[i][j]); - return ans; + return ans; } bool solve(int i, int j) { - if (filled[i][j]) { - if (i == 8 && j == 8) return true; - else return solve(i + (j == 8), (j + 1) % 9); - } - - int poss = check(i, j); - for (int k = 1; k <= 9; ++k) { - if ((poss & (1 << k)) == 0) { - mat[i][j] = k; - if (i == 8 && j == 8) return true; - if (solve(i + (j == 8), (j + 1) % 9)) return true; - mat[i][j] = filled[i][j]; + if (filled[i][j]) { + if (i == 8 && j == 8) return true; + else return solve(i + (j == 8), (j + 1) % 9); } - } - return false; + int poss = check(i, j); + for (int k = 1; k <= 9; ++k) { + if ((poss & (1 << k)) == 0) { + mat[i][j] = k; + if (i == 8 && j == 8) return true; + if (solve(i + (j == 8), (j + 1) % 9)) return true; + mat[i][j] = filled[i][j]; + } + } + + return false; } int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - mat.resize(9, vector<int>(9)); - - int n; cin >> n; - for (int cas = 0; cas < n; ++cas) { - for (auto &i : mat) - for (auto &j : i) - cin >> j; - - filled = mat; - - if (solve(0, 0)) - for (auto &i : mat) { - for (auto j : i) cout << j << " "; - cout << ende; - } - else - cout << "No solution" << ende; - } + ios::sync_with_stdio(0); + cin.tie(0); + + mat.resize(9, vector<int>(9)); + + int n; cin >> n; + for (int cas = 0; cas < n; ++cas) { + for (auto &i : mat) + for (auto &j : i) + cin >> j; + + filled = mat; + + if (solve(0, 0)) + for (auto &i : mat) { + for (auto j : i) cout << j << " "; + cout << ende; + } + else + cout << "No solution" << ende; + } - return 0; + return 0; } diff --git a/contests/Cadernaveis/ENGARRAF.cpp b/contests/Cadernaveis/ENGARRAF.cpp index ad23fe0..125b73e 100644 --- a/contests/Cadernaveis/ENGARRAF.cpp +++ b/contests/Cadernaveis/ENGARRAF.cpp @@ -26,65 +26,65 @@ typedef pair<int,int> ii; vector<ii> graph[MAX]; struct Dijkstra { - int N; - vector<int> dist, vis; + int N; + vector<int> dist, vis; - Dijkstra(int N) : - N(N), dist(N), vis(N) - {} + Dijkstra(int N) : + N(N), dist(N), vis(N) + {} - void init() { - fill(all(dist), inf); - fill(all(vis), 0); - } + void init() { + fill(all(dist), inf); + fill(all(vis), 0); + } - int run(int s, int d) { - set<ii> pq; + int run(int s, int d) { + set<ii> pq; - dist[s] = 0; - pq.insert(ii(0, s)); + dist[s] = 0; + pq.insert(ii(0, s)); - while (pq.size() != 0) { - int u = pq.begin()->se; - pq.erase(pq.begin()); + while (pq.size() != 0) { + int u = pq.begin()->se; + pq.erase(pq.begin()); - if (vis[u]) continue; - vis[u] = 1; + if (vis[u]) continue; + vis[u] = 1; - for (auto i : graph[u]) { - int v = i.fi; - int wt = i.se; + for (auto i : graph[u]) { + int v = i.fi; + int wt = i.se; - if (!vis[v] && dist[v] > dist[u] + wt) { - dist[v] = dist[u] + wt; - pq.insert(ii(dist[v], v)); + if (!vis[v] && dist[v] > dist[u] + wt) { + dist[v] = dist[u] + wt; + pq.insert(ii(dist[v], v)); + } + } } - } - } - return dist[d]; - } + return dist[d]; + } } dijkstra(MAX); int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n, m; - while (cin >> n >> m && (n || m)) { - dijkstra.init(); - for (int i = 0; i <= n; ++i) - graph[i].clear(); - - for (int i = 0; i < m; ++i) { - int o, d, t; cin >> o >> d >> t; - graph[o].pb(ii(d, t)); - } + ios::sync_with_stdio(0); + cin.tie(0); + + int n, m; + while (cin >> n >> m && (n || m)) { + dijkstra.init(); + for (int i = 0; i <= n; ++i) + graph[i].clear(); + + for (int i = 0; i < m; ++i) { + int o, d, t; cin >> o >> d >> t; + graph[o].pb(ii(d, t)); + } - int s, t; cin >> s >> t; - int ans = dijkstra.run(s, t); - cout << ((ans == inf) ? -1 : ans) << ende; - } + int s, t; cin >> s >> t; + int ans = dijkstra.run(s, t); + cout << ((ans == inf) ? -1 : ans) << ende; + } - return 0; + return 0; } diff --git a/contests/Cadernaveis/GINCAN11.cpp b/contests/Cadernaveis/GINCAN11.cpp index 9c0a271..906310b 100644 --- a/contests/Cadernaveis/GINCAN11.cpp +++ b/contests/Cadernaveis/GINCAN11.cpp @@ -26,33 +26,33 @@ int cont[1010]; vector<int> graph[1010]; void dfs(int x) { - cont[x] = 1; - for (auto i : graph[x]) - if (!cont[i]) - dfs(i); + cont[x] = 1; + for (auto i : graph[x]) + if (!cont[i]) + dfs(i); } int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n, m, a, b; - cin >> n >> m; - for (int i = 0; i < m; ++i) { - cin >> a >> b; - a--, b--; - graph[a].pb(b); - graph[b].pb(a); - } - - int ans = 0; - for (int i = 0; i < n; ++i) { - if (!cont[i]) { - dfs(i); - ans++; + ios::sync_with_stdio(0); + cin.tie(0); + + int n, m, a, b; + cin >> n >> m; + for (int i = 0; i < m; ++i) { + cin >> a >> b; + a--, b--; + graph[a].pb(b); + graph[b].pb(a); } - } - cout << ans << '\n'; - return 0; + int ans = 0; + for (int i = 0; i < n; ++i) { + if (!cont[i]) { + dfs(i); + ans++; + } + } + + cout << ans << '\n'; + return 0; } diff --git a/contests/Cadernaveis/JANELA13.cpp b/contests/Cadernaveis/JANELA13.cpp index 509abfb..d849b01 100644 --- a/contests/Cadernaveis/JANELA13.cpp +++ b/contests/Cadernaveis/JANELA13.cpp @@ -22,37 +22,37 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n; n = 3; - vector<ii> v; - v.pb(ii(0, -1)); - v.pb(ii(600, 2)); - for (int i = 0; i < n; ++i) { - int x; cin >> x; - v.pb(ii(x, 0)); - v.pb(ii(x+200, 1)); - } - - int curr = 0, ans = 0; - bool count = false; - sort(all(v)); - for (int i = 0; i < v.size(); ++i) { - if (v[i].se == 0) - curr++; - else if (v[i].se == 1) - curr--; - - if (count) { - ans += v[i].fi - v[i-1].fi; - count = false; + ios::sync_with_stdio(0); + cin.tie(0); + + int n; n = 3; + vector<ii> v; + v.pb(ii(0, -1)); + v.pb(ii(600, 2)); + for (int i = 0; i < n; ++i) { + int x; cin >> x; + v.pb(ii(x, 0)); + v.pb(ii(x+200, 1)); } - if (curr == 0) - count = true; - } + int curr = 0, ans = 0; + bool count = false; + sort(all(v)); + for (int i = 0; i < v.size(); ++i) { + if (v[i].se == 0) + curr++; + else if (v[i].se == 1) + curr--; + + if (count) { + ans += v[i].fi - v[i-1].fi; + count = false; + } + + if (curr == 0) + count = true; + } - cout << ans * 100 << ende; - return 0; + cout << ans * 100 << ende; + return 0; } diff --git a/contests/Cadernaveis/KOCH.cpp b/contests/Cadernaveis/KOCH.cpp index 91ff450..b55f540 100644 --- a/contests/Cadernaveis/KOCH.cpp +++ b/contests/Cadernaveis/KOCH.cpp @@ -1,414 +1,414 @@ /// Crescimento das Populacoes de bacilos #include <bits/stdc++.h> - + #define EPS 1e-6 #define MOD 1000000007 #define inf 0x3f3f3f3f #define llinf 0x3f3f3f3f3f3f3f3f - + #define fi first #define se second #define pb push_back #define ende '\n' - + #define all(x) (x).begin(), (x).end() #define rall(x) (x).rbegin(), (x).rend() #define mset(x, y) memset(&x, (y), sizeof(x)) - + using namespace std; - + using ll = long long; using ii = pair<int,int>; - + const int base = 1000000000; const int base_d = 9; - + struct BigInt { - int sign; - vector<int> num; - - BigInt() : sign(1) {} - BigInt(ll x) { *this = x; } - BigInt(const string &s) { read(s); } - - void operator=(const BigInt &x) { - sign = x.sign; - num = x.num; - } - - void operator=(ll x) { - sign = 1; - if (x < 0) sign = -1, x = -x; - for (; x > 0; x /= base) - pb(x % base); - } - - BigInt operator+(const BigInt &x) const { - if (sign != x.sign) return *this - (-x); - - - int carry = 0; - BigInt res = x; - - for (int i = 0; i < max(size(), x.size()) || carry; ++i) { - if (i == (int) res.size()) - res.push_back(0); - - res[i] += carry + (i < size() ? num[i] : 0); - carry = res[i] >= base; - if (carry) res[i] -= base; - } - - return res; - } - - BigInt operator-(const BigInt &x) const { - if (sign != x.sign) return *this + (-x); - if (abs() < x.abs()) return -(x - *this); - - int carry = 0; - BigInt res = *this; - - for (int i = 0; i < x.size() || carry; ++i) { - res[i] -= carry + (i < x.size() ? x[i] : 0); - carry = res[i] < 0; - if (carry) res[i] += base; - } - - res.trim(); - return res; - } - - void operator*=(int x) { - if (x < 0) sign = -sign, x = -x; - - int carry = 0; - for (int i = 0; i < size() || carry; ++i) { - if (i == size()) pb(0); - ll cur = num[i] * (ll) x + carry; - - carry = (int) (cur / base); - num[i] = (int) (cur % base); - } - - trim(); - } - - BigInt operator*(int x) const { - BigInt res = *this; - res *= x; - return res; - } - - friend pair<BigInt, BigInt> divmod(const BigInt &a1, - const BigInt &b1) - { - int norm = base / (b1.back() + 1); - BigInt a = a1.abs() * norm; - BigInt b = b1.abs() * norm; - BigInt q, r; - q.resize(a.size()); - - for (int i = a.size() - 1; i >= 0; i--) { - r *= base; - r += a[i]; - - int s1 = r.size() <= b.size() ? 0 : r[b.size()]; - int s2 = r.size() <= b.size() - 1 ? 0 : r[b.size() - 1]; - int d = ((ll) base * s1 + s2) / b.back(); - - r -= b * d; - while (r < 0) r += b, --d; - q[i] = d; - } - - q.sign = a1.sign * b1.sign; - r.sign = a1.sign; - q.trim(); r.trim(); - - return make_pair(q, r / norm); - } - - BigInt operator/(const BigInt &x) const { - return divmod(*this, x).fi; - } - - BigInt operator%(const BigInt &x) const { - return divmod(*this, x).se; - } - - void operator/=(int x) { - if (x < 0) sign = -sign, x = -x; - - for (int i = size() - 1, rem = 0; i >= 0; --i) { - ll cur = num[i] + rem * (ll) base; - num[i] = (int) (cur / x); - rem = (int) (cur % x); - } - - trim(); - } - - BigInt operator/(int x) const { - BigInt res = *this; - res /= x; - return res; - } - - int operator%(int x) const { - if (x < 0) x = -x; - - int m = 0; - for (int i = size() - 1; i >= 0; --i) - m = (num[i] + m * (ll) base) % x; - - return m * sign; - } - - void operator+=(const BigInt &x) { - *this = *this + x; - } - void operator-=(const BigInt &x) { - *this = *this - x; - } - void operator*=(const BigInt &x) { - *this = *this * x; - } - void operator/=(const BigInt &x) { - *this = *this / x; - } - - bool operator<(const BigInt &x) const { - if (sign != x.sign) - return sign < x.sign; - - if (size() != x.size()) - return size() * sign < x.size() * x.sign; - - for (int i = size() - 1; i >= 0; i--) - if (num[i] != x[i]) - return num[i] * sign < x[i] * sign; - - return false; - } - - bool operator>(const BigInt &x) const { - return x < *this; - } - bool operator<=(const BigInt &x) const { - return !(x < *this); - } - bool operator>=(const BigInt &x) const { - return !(*this < x); - } - bool operator==(const BigInt &x) const { - return !(*this < x) && !(x < *this); - } - bool operator!=(const BigInt &x) const { - return *this < x || x < *this; - } - - void trim() { - while (!empty() && !back()) pop_back(); - if (empty()) sign = 1; - } - - bool is_zero() const { - return empty() || (size() == 1 && !num[0]); - } - - BigInt operator-() const { - BigInt res = *this; - res.sign = -sign; - return res; - } - - BigInt abs() const { - BigInt res = *this; - res.sign *= res.sign; - return res; - } - - ll to_long() const { - ll res = 0; - for (int i = size() - 1; i >= 0; i--) - res = res * base + num[i]; - return res * sign; - } - - friend BigInt gcd(const BigInt &a, const BigInt &b) { - return b.is_zero() ? a : gcd(b, a % b); - } - - friend BigInt lcm(const BigInt &a, const BigInt &b) { - return a / gcd(a, b) * b; - } - - void read(const string &s) { - sign = 1; - num.clear(); - - int pos = 0; - while (pos < s.size() && - (s[pos] == '-' || s[pos] == '+')) { - if (s[pos] == '-') - sign = -sign; - ++pos; - } - - for (int i = s.size() - 1; i >= pos; i -= base_d) { - int x = 0; - for (int j = max(pos, i - base_d + 1); j <= i; j++) - x = x * 10 + s[j] - '0'; - num.push_back(x); - } - - trim(); - } - - friend istream& operator>>(istream &stream, BigInt &v) { - string s; stream >> s; - v.read(s); - return stream; - } - - friend ostream& operator<<(ostream &stream, const BigInt &x) { - if (x.sign == -1) - stream << '-'; - - stream << (x.empty() ? 0 : x.back()); - for (int i = x.size() - 2; i >= 0; --i) - stream << setw(base_d) << setfill('0') << x.num[i]; - - return stream; - } - - static vector<int> convert_base(const vector<int> &a, - int oldd, int newd) - { - vector<ll> p(max(oldd, newd) + 1); - p[0] = 1; - for (int i = 1; i < p.size(); i++) - p[i] = p[i - 1] * 10; - - ll cur = 0; - int curd = 0; - vector<int> res; - - for (int i = 0; i < a.size(); i++) { - cur += a[i] * p[curd]; - curd += oldd; - - while (curd >= newd) { - res.pb(int(cur % p[newd])); - cur /= p[newd]; - curd -= newd; - } - } - - res.pb((int) cur); - while (!res.empty() && !res.back()) - res.pop_back(); - return res; - } - - static vector<ll> karatsuba(const vector<ll> &a, - const vector<ll> &b) - { - int n = a.size(); - vector<ll> res(n + n); - - if (n <= 32) { - for (int i = 0; i < n; i++) - for (int j = 0; j < n; j++) - res[i + j] += a[i] * b[j]; - return res; - } - - int k = n >> 1; - vector<ll> a1(a.begin(), a.begin() + k); - vector<ll> a2(a.begin() + k, a.end()); - vector<ll> b1(b.begin(), b.begin() + k); - vector<ll> b2(b.begin() + k, b.end()); - - vector<ll> a1b1 = karatsuba(a1, b1); - vector<ll> a2b2 = karatsuba(a2, b2); - - for (int i = 0; i < k; i++) - a2[i] += a1[i]; - for (int i = 0; i < k; i++) - b2[i] += b1[i]; - - vector<ll> r = karatsuba(a2, b2); - for (int i = 0; i < a1b1.size(); i++) r[i] -= a1b1[i]; - for (int i = 0; i < a2b2.size(); i++) r[i] -= a2b2[i]; - - for (int i = 0; i < r.size(); i++) res[i + k] += r[i]; - for (int i = 0; i < a1b1.size(); i++) res[i] += a1b1[i]; - for (int i = 0; i < a2b2.size(); i++) res[i + n] += a2b2[i]; - - return res; - } - - BigInt operator*(const BigInt &x) const { - vector<int> a6 = convert_base(this->num, base_d, 6); - vector<int> b6 = convert_base(x.num, base_d, 6); - - vector<ll> a(all(a6)); - vector<ll> b(all(b6)); - - while (a.size() < b.size()) a.pb(0); - while (b.size() < a.size()) b.pb(0); - while (a.size() & (a.size() - 1)) - a.pb(0), b.pb(0); - - vector<ll> c = karatsuba(a, b); - - BigInt res; - int carry = 0; - res.sign = sign * x.sign; - - for (int i = 0; i < c.size(); i++) { - ll cur = c[i] + carry; - res.pb((int) (cur % 1000000)); - carry = (int) (cur / 1000000); - } - - res.num = convert_base(res.num, 6, base_d); - res.trim(); - return res; - } - - // Handles vector operations. - int back() const { return num.back(); } - bool empty() const { return num.empty(); } - size_t size() const { return num.size(); } - - void pop_back() { num.pop_back(); } - void resize(int x) { num.resize(x); } - void push_back(int x) { num.push_back(x); } - - int &operator[](int i) { return num[i]; } - int operator[](int i) const { return num[i]; } + int sign; + vector<int> num; + + BigInt() : sign(1) {} + BigInt(ll x) { *this = x; } + BigInt(const string &s) { read(s); } + + void operator=(const BigInt &x) { + sign = x.sign; + num = x.num; + } + + void operator=(ll x) { + sign = 1; + if (x < 0) sign = -1, x = -x; + for (; x > 0; x /= base) + pb(x % base); + } + + BigInt operator+(const BigInt &x) const { + if (sign != x.sign) return *this - (-x); + + + int carry = 0; + BigInt res = x; + + for (int i = 0; i < max(size(), x.size()) || carry; ++i) { + if (i == (int) res.size()) + res.push_back(0); + + res[i] += carry + (i < size() ? num[i] : 0); + carry = res[i] >= base; + if (carry) res[i] -= base; + } + + return res; + } + + BigInt operator-(const BigInt &x) const { + if (sign != x.sign) return *this + (-x); + if (abs() < x.abs()) return -(x - *this); + + int carry = 0; + BigInt res = *this; + + for (int i = 0; i < x.size() || carry; ++i) { + res[i] -= carry + (i < x.size() ? x[i] : 0); + carry = res[i] < 0; + if (carry) res[i] += base; + } + + res.trim(); + return res; + } + + void operator*=(int x) { + if (x < 0) sign = -sign, x = -x; + + int carry = 0; + for (int i = 0; i < size() || carry; ++i) { + if (i == size()) pb(0); + ll cur = num[i] * (ll) x + carry; + + carry = (int) (cur / base); + num[i] = (int) (cur % base); + } + + trim(); + } + + BigInt operator*(int x) const { + BigInt res = *this; + res *= x; + return res; + } + + friend pair<BigInt, BigInt> divmod(const BigInt &a1, + const BigInt &b1) + { + int norm = base / (b1.back() + 1); + BigInt a = a1.abs() * norm; + BigInt b = b1.abs() * norm; + BigInt q, r; + q.resize(a.size()); + + for (int i = a.size() - 1; i >= 0; i--) { + r *= base; + r += a[i]; + + int s1 = r.size() <= b.size() ? 0 : r[b.size()]; + int s2 = r.size() <= b.size() - 1 ? 0 : r[b.size() - 1]; + int d = ((ll) base * s1 + s2) / b.back(); + + r -= b * d; + while (r < 0) r += b, --d; + q[i] = d; + } + + q.sign = a1.sign * b1.sign; + r.sign = a1.sign; + q.trim(); r.trim(); + + return make_pair(q, r / norm); + } + + BigInt operator/(const BigInt &x) const { + return divmod(*this, x).fi; + } + + BigInt operator%(const BigInt &x) const { + return divmod(*this, x).se; + } + + void operator/=(int x) { + if (x < 0) sign = -sign, x = -x; + + for (int i = size() - 1, rem = 0; i >= 0; --i) { + ll cur = num[i] + rem * (ll) base; + num[i] = (int) (cur / x); + rem = (int) (cur % x); + } + + trim(); + } + + BigInt operator/(int x) const { + BigInt res = *this; + res /= x; + return res; + } + + int operator%(int x) const { + if (x < 0) x = -x; + + int m = 0; + for (int i = size() - 1; i >= 0; --i) + m = (num[i] + m * (ll) base) % x; + + return m * sign; + } + + void operator+=(const BigInt &x) { + *this = *this + x; + } + void operator-=(const BigInt &x) { + *this = *this - x; + } + void operator*=(const BigInt &x) { + *this = *this * x; + } + void operator/=(const BigInt &x) { + *this = *this / x; + } + + bool operator<(const BigInt &x) const { + if (sign != x.sign) + return sign < x.sign; + + if (size() != x.size()) + return size() * sign < x.size() * x.sign; + + for (int i = size() - 1; i >= 0; i--) + if (num[i] != x[i]) + return num[i] * sign < x[i] * sign; + + return false; + } + + bool operator>(const BigInt &x) const { + return x < *this; + } + bool operator<=(const BigInt &x) const { + return !(x < *this); + } + bool operator>=(const BigInt &x) const { + return !(*this < x); + } + bool operator==(const BigInt &x) const { + return !(*this < x) && !(x < *this); + } + bool operator!=(const BigInt &x) const { + return *this < x || x < *this; + } + + void trim() { + while (!empty() && !back()) pop_back(); + if (empty()) sign = 1; + } + + bool is_zero() const { + return empty() || (size() == 1 && !num[0]); + } + + BigInt operator-() const { + BigInt res = *this; + res.sign = -sign; + return res; + } + + BigInt abs() const { + BigInt res = *this; + res.sign *= res.sign; + return res; + } + + ll to_long() const { + ll res = 0; + for (int i = size() - 1; i >= 0; i--) + res = res * base + num[i]; + return res * sign; + } + + friend BigInt gcd(const BigInt &a, const BigInt &b) { + return b.is_zero() ? a : gcd(b, a % b); + } + + friend BigInt lcm(const BigInt &a, const BigInt &b) { + return a / gcd(a, b) * b; + } + + void read(const string &s) { + sign = 1; + num.clear(); + + int pos = 0; + while (pos < s.size() && + (s[pos] == '-' || s[pos] == '+')) { + if (s[pos] == '-') + sign = -sign; + ++pos; + } + + for (int i = s.size() - 1; i >= pos; i -= base_d) { + int x = 0; + for (int j = max(pos, i - base_d + 1); j <= i; j++) + x = x * 10 + s[j] - '0'; + num.push_back(x); + } + + trim(); + } + + friend istream& operator>>(istream &stream, BigInt &v) { + string s; stream >> s; + v.read(s); + return stream; + } + + friend ostream& operator<<(ostream &stream, const BigInt &x) { + if (x.sign == -1) + stream << '-'; + + stream << (x.empty() ? 0 : x.back()); + for (int i = x.size() - 2; i >= 0; --i) + stream << setw(base_d) << setfill('0') << x.num[i]; + + return stream; + } + + static vector<int> convert_base(const vector<int> &a, + int oldd, int newd) + { + vector<ll> p(max(oldd, newd) + 1); + p[0] = 1; + for (int i = 1; i < p.size(); i++) + p[i] = p[i - 1] * 10; + + ll cur = 0; + int curd = 0; + vector<int> res; + + for (int i = 0; i < a.size(); i++) { + cur += a[i] * p[curd]; + curd += oldd; + + while (curd >= newd) { + res.pb(int(cur % p[newd])); + cur /= p[newd]; + curd -= newd; + } + } + + res.pb((int) cur); + while (!res.empty() && !res.back()) + res.pop_back(); + return res; + } + + static vector<ll> karatsuba(const vector<ll> &a, + const vector<ll> &b) + { + int n = a.size(); + vector<ll> res(n + n); + + if (n <= 32) { + for (int i = 0; i < n; i++) + for (int j = 0; j < n; j++) + res[i + j] += a[i] * b[j]; + return res; + } + + int k = n >> 1; + vector<ll> a1(a.begin(), a.begin() + k); + vector<ll> a2(a.begin() + k, a.end()); + vector<ll> b1(b.begin(), b.begin() + k); + vector<ll> b2(b.begin() + k, b.end()); + + vector<ll> a1b1 = karatsuba(a1, b1); + vector<ll> a2b2 = karatsuba(a2, b2); + + for (int i = 0; i < k; i++) + a2[i] += a1[i]; + for (int i = 0; i < k; i++) + b2[i] += b1[i]; + + vector<ll> r = karatsuba(a2, b2); + for (int i = 0; i < a1b1.size(); i++) r[i] -= a1b1[i]; + for (int i = 0; i < a2b2.size(); i++) r[i] -= a2b2[i]; + + for (int i = 0; i < r.size(); i++) res[i + k] += r[i]; + for (int i = 0; i < a1b1.size(); i++) res[i] += a1b1[i]; + for (int i = 0; i < a2b2.size(); i++) res[i + n] += a2b2[i]; + + return res; + } + + BigInt operator*(const BigInt &x) const { + vector<int> a6 = convert_base(this->num, base_d, 6); + vector<int> b6 = convert_base(x.num, base_d, 6); + + vector<ll> a(all(a6)); + vector<ll> b(all(b6)); + + while (a.size() < b.size()) a.pb(0); + while (b.size() < a.size()) b.pb(0); + while (a.size() & (a.size() - 1)) + a.pb(0), b.pb(0); + + vector<ll> c = karatsuba(a, b); + + BigInt res; + int carry = 0; + res.sign = sign * x.sign; + + for (int i = 0; i < c.size(); i++) { + ll cur = c[i] + carry; + res.pb((int) (cur % 1000000)); + carry = (int) (cur / 1000000); + } + + res.num = convert_base(res.num, 6, base_d); + res.trim(); + return res; + } + + // Handles vector operations. + int back() const { return num.back(); } + bool empty() const { return num.empty(); } + size_t size() const { return num.size(); } + + void pop_back() { num.pop_back(); } + void resize(int x) { num.resize(x); } + void push_back(int x) { num.push_back(x); } + + int &operator[](int i) { return num[i]; } + int operator[](int i) const { return num[i]; } }; - + int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - vector<int> fib(1501); - fib[0] = 0; - fib[1] = 1; - for (int i = 2; i <= 1500; ++i) - fib[i] = (fib[i-1] + fib[i-2]) % 1000; - - int t; cin >> t; - for (int cas = 1; cas <= t; ++cas) { - BigInt x; cin >> x; - x = x % BigInt(1500); - cout << setw(3) << setfill('0') << fib[x.to_long()]<< ende; - } - - return 0; + ios::sync_with_stdio(0); + cin.tie(0); + + vector<int> fib(1501); + fib[0] = 0; + fib[1] = 1; + for (int i = 2; i <= 1500; ++i) + fib[i] = (fib[i-1] + fib[i-2]) % 1000; + + int t; cin >> t; + for (int cas = 1; cas <= t; ++cas) { + BigInt x; cin >> x; + x = x % BigInt(1500); + cout << setw(3) << setfill('0') << fib[x.to_long()]<< ende; + } + + return 0; } diff --git a/contests/Cadernaveis/KRAKOVIA.cpp b/contests/Cadernaveis/KRAKOVIA.cpp index fb390d9..a41a865 100644 --- a/contests/Cadernaveis/KRAKOVIA.cpp +++ b/contests/Cadernaveis/KRAKOVIA.cpp @@ -25,245 +25,245 @@ const int base = 1000000000; const int base_d = 9; struct BigInt { - int sign = 1; - vector<int> num; + int sign = 1; + vector<int> num; + + BigInt() {} + BigInt(ll x) { *this = x; } + BigInt(const string &x) { read(x); } + + void operator=(ll x) { + sign = 1; + if (x < 0) sign = -1, x = -x; + for (; x > 0; x /= base) + num.pb(x % base); + } + + BigInt operator+(const BigInt &x) const { + if (sign != x.sign) return *this - (-x); + + BigInt ans = x; + int carry = 0; + for (int i = 0; i < max(size(), x.size()) || carry; ++i) { + if (i == ans.size()) ans.push_back(0); - BigInt() {} - BigInt(ll x) { *this = x; } - BigInt(const string &x) { read(x); } + if (i < size()) ans[i] += carry + num[i]; + else ans[i] += carry; - void operator=(ll x) { - sign = 1; - if (x < 0) sign = -1, x = -x; - for (; x > 0; x /= base) - num.pb(x % base); - } + carry = ans[i] >= base; + if (carry) ans[i] -= base; + } - BigInt operator+(const BigInt &x) const { - if (sign != x.sign) return *this - (-x); + return ans; + } + + BigInt operator-(const BigInt& x) const { + if (sign != x.sign) + return *this + (-x); + if (abs() < x.abs()) + return -(x - *this); - BigInt ans = x; - int carry = 0; - for (int i = 0; i < max(size(), x.size()) || carry; ++i) { - if (i == ans.size()) ans.push_back(0); + BigInt ans = *this; + int carry = 0; + for (int i = 0; i < x.size() || carry; ++i) { + if (i < x.size()) ans[i] -= carry + x[i]; + else ans[i] -= carry; - if (i < size()) ans[i] += carry + num[i]; - else ans[i] += carry; + carry = ans[i] < 0; + if (carry) ans[i] += base; + } - carry = ans[i] >= base; - if (carry) ans[i] -= base; + ans.trim(); + return ans; } - return ans; - } + void operator+=(const BigInt &v) { + *this = *this + v; + } + void operator-=(const BigInt &v) { + *this = *this - v; + } - BigInt operator-(const BigInt& x) const { - if (sign != x.sign) - return *this + (-x); - if (abs() < x.abs()) - return -(x - *this); + void operator*=(int v) { + if (v < 0) sign = -sign, v = -v; + for (int i = 0, carry = 0; i < (int) size() || carry; ++i) { + if (i == (int) size()) + num.push_back(0); - BigInt ans = *this; - int carry = 0; - for (int i = 0; i < x.size() || carry; ++i) { - if (i < x.size()) ans[i] -= carry + x[i]; - else ans[i] -= carry; + ll cur = num[i] * (ll) v + carry; + carry = (int) (cur / base); + num[i] = (int) (cur % base); + } - carry = ans[i] < 0; - if (carry) ans[i] += base; + trim(); } - ans.trim(); - return ans; - } - - void operator+=(const BigInt &v) { - *this = *this + v; - } - void operator-=(const BigInt &v) { - *this = *this - v; - } - - void operator*=(int v) { - if (v < 0) sign = -sign, v = -v; - for (int i = 0, carry = 0; i < (int) size() || carry; ++i) { - if (i == (int) size()) - num.push_back(0); - - ll cur = num[i] * (ll) v + carry; - carry = (int) (cur / base); - num[i] = (int) (cur % base); + BigInt operator*(int v) const { + BigInt res = *this; + res *= v; + return res; } - trim(); - } - - BigInt operator*(int v) const { - BigInt res = *this; - res *= v; - return res; - } - - // Returns pair = (x / y, x % y). - friend pair<BigInt,BigInt> divmod(const BigInt &x, - const BigInt &y) { - int norm = base / (y.back() + 1); - - BigInt a = x.abs() * norm; - BigInt b = y.abs() * norm; - BigInt q, r; - q.num.resize(a.size()); - - for (int i = a.size() - 1; i >= 0; i--) { - r *= base; - r += a[i]; - int s1 = r.size() <= b.size() ? 0 : r.num[b.size()]; - int s2 = r.size() <= b.size() - 1 ? 0 : r.num[b.size() - 1]; - - int d = ((ll) base * s1 + s2) / b.back(); - r -= b * d; - while (r < 0) r += b, --d; - q.num[i] = d; + // Returns pair = (x / y, x % y). + friend pair<BigInt,BigInt> divmod(const BigInt &x, + const BigInt &y) { + int norm = base / (y.back() + 1); + + BigInt a = x.abs() * norm; + BigInt b = y.abs() * norm; + BigInt q, r; + q.num.resize(a.size()); + + for (int i = a.size() - 1; i >= 0; i--) { + r *= base; + r += a[i]; + int s1 = r.size() <= b.size() ? 0 : r.num[b.size()]; + int s2 = r.size() <= b.size() - 1 ? 0 : r.num[b.size() - 1]; + + int d = ((ll) base * s1 + s2) / b.back(); + r -= b * d; + while (r < 0) r += b, --d; + q.num[i] = d; + } + + q.sign = x.sign * y.sign; + r.sign = x.sign; + q.trim(); r.trim(); + return make_pair(q, r / norm); } - q.sign = x.sign * y.sign; - r.sign = x.sign; - q.trim(); r.trim(); - return make_pair(q, r / norm); - } + BigInt operator/(const BigInt &x) const { + return divmod(*this, x).fi; + } - BigInt operator/(const BigInt &x) const { - return divmod(*this, x).fi; - } + void operator/=(int v) { + if (v < 0) sign = -sign, v = -v; - void operator/=(int v) { - if (v < 0) sign = -sign, v = -v; + for (int i = (int) size() - 1, rem = 0; i >= 0; --i) { + ll cur = num[i] + rem * (ll) base; + num[i] = (int) (cur / v); + rem = (int) (cur % v); + } - for (int i = (int) size() - 1, rem = 0; i >= 0; --i) { - ll cur = num[i] + rem * (ll) base; - num[i] = (int) (cur / v); - rem = (int) (cur % v); + trim(); } - trim(); - } - - BigInt operator/(int x) const { - BigInt res = *this; - res /= x; - return res; - } - - // Removes leading zeros. - void trim() { - while (!num.empty() && num.back() == 0) - num.pop_back(); - - if (num.empty()) - sign = 1; - } - - bool operator<(const BigInt &x) const { - if (sign != x.sign) - return sign < x.sign; - - if (size() != x.size()) - return (size() * sign) < (x.size() * x.sign); - - for (int i = size() - 1; i >= 0; i--) - if (num[i] != x[i]) - return (num[i] * sign) < (x[i] * x.sign); - - return false; - } - - bool operator==(const BigInt &x) const { return !(*this < x) && !(x < *this); } - bool operator>(const BigInt &x) const { return (x < *this); } - bool operator<=(const BigInt &x) const { return !(x < *this); } - bool operator>=(const BigInt &x) const { return !(*this < x); } - bool operator!=(const BigInt &x) const { return !(*this == x); } - - // Handles -x (change of sign). - BigInt operator-() const { - BigInt ans = *this; - ans.sign = -sign; - return ans; - } - - // Returs absolute value. - BigInt abs() const { - BigInt ans = *this; - ans.sign *= ans.sign; - return ans; - } - - // Transforms string into BigInt. - void read(const string &s) { - sign = 1; - num.clear(); - - int pos = 0; - while (pos < (int) s.size() && - (s[pos] == '-' || s[pos] == '+')) - { - if (s[pos] == '-') - sign = -sign; - ++pos; + BigInt operator/(int x) const { + BigInt res = *this; + res /= x; + return res; } - for (int i = s.size() - 1; i >= pos; i -= base_d) { - int x = 0; - for (int j = max(pos, i - base_d + 1); j <= i; j++) - x = x * 10 + s[j] - '0'; - num.push_back(x); + // Removes leading zeros. + void trim() { + while (!num.empty() && num.back() == 0) + num.pop_back(); + + if (num.empty()) + sign = 1; } - trim(); - } + bool operator<(const BigInt &x) const { + if (sign != x.sign) + return sign < x.sign; - friend istream& operator>>(istream &stream, BigInt &v) { - string s; stream >> s; - v.read(s); - return stream; - } + if (size() != x.size()) + return (size() * sign) < (x.size() * x.sign); - friend ostream& operator<<(ostream &stream, - const BigInt &x) { - if (x.sign == -1) - stream << '-'; + for (int i = size() - 1; i >= 0; i--) + if (num[i] != x[i]) + return (num[i] * sign) < (x[i] * x.sign); - stream << (x.empty() ? 0 : x.back()); - for (int i = x.size() - 2; i >= 0; --i) - stream << setw(base_d) << setfill('0') << x.num[i]; + return false; + } - return stream; - } + bool operator==(const BigInt &x) const { return !(*this < x) && !(x < *this); } + bool operator>(const BigInt &x) const { return (x < *this); } + bool operator<=(const BigInt &x) const { return !(x < *this); } + bool operator>=(const BigInt &x) const { return !(*this < x); } + bool operator!=(const BigInt &x) const { return !(*this == x); } + + // Handles -x (change of sign). + BigInt operator-() const { + BigInt ans = *this; + ans.sign = -sign; + return ans; + } - // Handles vector operations. - int back() const { return num.back(); } - bool empty() const { return num.empty(); } - size_t size() const { return num.size(); } - void push_back(int x) { num.push_back(x); } + // Returs absolute value. + BigInt abs() const { + BigInt ans = *this; + ans.sign *= ans.sign; + return ans; + } - int &operator[](int i) { return num[i]; } - int operator[](int i) const { return num[i]; } + // Transforms string into BigInt. + void read(const string &s) { + sign = 1; + num.clear(); + + int pos = 0; + while (pos < (int) s.size() && + (s[pos] == '-' || s[pos] == '+')) + { + if (s[pos] == '-') + sign = -sign; + ++pos; + } + + for (int i = s.size() - 1; i >= pos; i -= base_d) { + int x = 0; + for (int j = max(pos, i - base_d + 1); j <= i; j++) + x = x * 10 + s[j] - '0'; + num.push_back(x); + } + + trim(); + } + + friend istream& operator>>(istream &stream, BigInt &v) { + string s; stream >> s; + v.read(s); + return stream; + } + + friend ostream& operator<<(ostream &stream, + const BigInt &x) { + if (x.sign == -1) + stream << '-'; + + stream << (x.empty() ? 0 : x.back()); + for (int i = x.size() - 2; i >= 0; --i) + stream << setw(base_d) << setfill('0') << x.num[i]; + + return stream; + } + + // Handles vector operations. + int back() const { return num.back(); } + bool empty() const { return num.empty(); } + size_t size() const { return num.size(); } + void push_back(int x) { num.push_back(x); } + + int &operator[](int i) { return num[i]; } + int operator[](int i) const { return num[i]; } }; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n, f, cas = 1; - while (cin >> n >> f && (n || f)) { - vector<BigInt> v(n); - for (int i = 0; i < n; ++i) - cin >> v[i]; - - BigInt sum = accumulate(all(v), BigInt("0")); - cout << "Bill #" << cas << " costs " << sum << ": each friend should pay " << sum / f << ende; - cout << ende; - cas++; - } - - return 0; + ios::sync_with_stdio(0); + cin.tie(0); + + int n, f, cas = 1; + while (cin >> n >> f && (n || f)) { + vector<BigInt> v(n); + for (int i = 0; i < n; ++i) + cin >> v[i]; + + BigInt sum = accumulate(all(v), BigInt("0")); + cout << "Bill #" << cas << " costs " << sum << ": each friend should pay " << sum / f << ende; + cout << ende; + cas++; + } + + return 0; } diff --git a/contests/Cadernaveis/LA3635.cpp b/contests/Cadernaveis/LA3635.cpp index 212d07e..f9bf000 100644 --- a/contests/Cadernaveis/LA3635.cpp +++ b/contests/Cadernaveis/LA3635.cpp @@ -23,33 +23,33 @@ typedef long long ll; typedef pair<int,int> ii; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - cout << setprecision(9) << fixed; - - int t; cin >> t; - while (t--) { - int n, f; cin >> n >> f; - vector<double> v(n); - for (auto &i : v) - cin >> i; - - double l = 0.0, r = (double) llinf; - for (int i = 0; i < 300; ++i) { - double m = (l + r) / 2.0; - int p = 0; - - for (int j = 0; j < n; ++j) - p += (int) floor((v[j] * v[j] * M_PI) / m); - - if (p >= f + 1) - l = m; - else - r = m; + ios::sync_with_stdio(0); + cin.tie(0); + cout << setprecision(9) << fixed; + + int t; cin >> t; + while (t--) { + int n, f; cin >> n >> f; + vector<double> v(n); + for (auto &i : v) + cin >> i; + + double l = 0.0, r = (double) llinf; + for (int i = 0; i < 300; ++i) { + double m = (l + r) / 2.0; + int p = 0; + + for (int j = 0; j < n; ++j) + p += (int) floor((v[j] * v[j] * M_PI) / m); + + if (p >= f + 1) + l = m; + else + r = m; + } + + cout << l << ende; } - cout << l << ende; - } - - return 0; + return 0; } diff --git a/contests/Cadernaveis/LA4509.cpp b/contests/Cadernaveis/LA4509.cpp index cd2de3f..d4ba0c7 100644 --- a/contests/Cadernaveis/LA4509.cpp +++ b/contests/Cadernaveis/LA4509.cpp @@ -28,85 +28,85 @@ int dy[] = {0, 0, 1, -1}; int mat[MAX][MAX]; struct BellmanFord { - struct Edge { int u, v, w; }; + struct Edge { int u, v, w; }; - int N; - vector<int> dist; - vector<Edge> graph; + int N; + vector<int> dist; + vector<Edge> graph; - BellmanFord(int N) : - N(N), dist(N) - { init(); } + BellmanFord(int N) : + N(N), dist(N) + { init(); } - void init() { - fill(all(dist), inf); - } + void init() { + fill(all(dist), inf); + } - void add_edge(int u, int v, int w) { - graph.pb({ u, v, w }); - } + void add_edge(int u, int v, int w) { + graph.pb({ u, v, w }); + } - int run(int s, int d) { - dist[s] = 0; + int run(int s, int d) { + dist[s] = 0; - for (int i = 0; i < N; ++i) - for (auto e : graph) - if (dist[e.u] != inf && - dist[e.u] + e.w < dist[e.v]) - dist[e.v] = dist[e.u] + e.w; + for (int i = 0; i < N; ++i) + for (auto e : graph) + if (dist[e.u] != inf && + dist[e.u] + e.w < dist[e.v]) + dist[e.v] = dist[e.u] + e.w; - for (auto e : graph) - if (dist[e.u] != inf && - dist[e.u] + e.w < dist[e.v]) - return -inf; + for (auto e : graph) + if (dist[e.u] != inf && + dist[e.u] + e.w < dist[e.v]) + return -inf; - return dist[d]; - } + return dist[d]; + } }; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int r, c; - while (cin >> c >> r && (c || r)) { - mset(mat, 0); - BellmanFord bell(r*c); - - int g; cin >> g; - for (int i = 0; i < g; ++i) { - int x, y; cin >> x >> y; - mat[y][x] = 1; - } - - int e; cin >> e; - for (int i = 0; i < e; ++i) { - int x1, y1; cin >> x1 >> y1; - int x2, y2; cin >> x2 >> y2; - int t; cin >> t; - - bell.add_edge(y1 * c + x1, y2 * c + x2, t); - mat[y1][x1] = 1; + ios::sync_with_stdio(0); + cin.tie(0); + + int r, c; + while (cin >> c >> r && (c || r)) { + mset(mat, 0); + BellmanFord bell(r*c); + + int g; cin >> g; + for (int i = 0; i < g; ++i) { + int x, y; cin >> x >> y; + mat[y][x] = 1; + } + + int e; cin >> e; + for (int i = 0; i < e; ++i) { + int x1, y1; cin >> x1 >> y1; + int x2, y2; cin >> x2 >> y2; + int t; cin >> t; + + bell.add_edge(y1 * c + x1, y2 * c + x2, t); + mat[y1][x1] = 1; + } + + mat[r-1][c-1] = 1; + for (int i = 0; i < r; ++i) + for (int j = 0; j < c; ++j) + if (!mat[i][j]) + for (int k = 0; k < 4; ++k) { + int di = i + dx[k]; + int dj = j + dy[k]; + + if (di >= 0 && di < r && dj >= 0 && dj < c) + bell.add_edge(i*c + j, di*c + dj, 1); + } + + int ans = bell.run(0, (r-1)*c + (c-1)); + + if (ans == -inf) cout << "Never" << ende; + else if (ans == inf) cout << "Impossible" << ende; + else cout << ans << ende; } - mat[r-1][c-1] = 1; - for (int i = 0; i < r; ++i) - for (int j = 0; j < c; ++j) - if (!mat[i][j]) - for (int k = 0; k < 4; ++k) { - int di = i + dx[k]; - int dj = j + dy[k]; - - if (di >= 0 && di < r && dj >= 0 && dj < c) - bell.add_edge(i*c + j, di*c + dj, 1); - } - - int ans = bell.run(0, (r-1)*c + (c-1)); - - if (ans == -inf) cout << "Never" << ende; - else if (ans == inf) cout << "Impossible" << ende; - else cout << ans << ende; - } - - return 0; + return 0; } diff --git a/contests/Cadernaveis/LA5138.cpp b/contests/Cadernaveis/LA5138.cpp index 349eab9..6a2eb3f 100644 --- a/contests/Cadernaveis/LA5138.cpp +++ b/contests/Cadernaveis/LA5138.cpp @@ -23,89 +23,89 @@ using ii = pair<int,int>; template <typename T = double> struct Point { - T x, y; + T x, y; - Point() {} - Point(T x, T y) : x(x), y(y) {} + Point() {} + Point(T x, T y) : x(x), y(y) {} - Point operator+(Point p) { return Point(x+p.x, y+p.y); } - Point operator-(Point p) { return Point(x-p.x, y-p.y); } - Point operator*(T s) { return Point(x*s, y*s); } + Point operator+(Point p) { return Point(x+p.x, y+p.y); } + Point operator-(Point p) { return Point(x-p.x, y-p.y); } + Point operator*(T s) { return Point(x*s, y*s); } - T dot(Point p) { return (x*p.x) + (y*p.y); } - T cross(Point p) { return (x*p.y) - (y*p.x); } + T dot(Point p) { return (x*p.x) + (y*p.y); } + T cross(Point p) { return (x*p.y) - (y*p.x); } }; bool cw(Point<> a, Point<> b, Point<> c) { - return (b - a).cross(c - a) <= 0; + return (b - a).cross(c - a) <= 0; } template <typename T = double> struct Segment { - Point<T> a, b; + Point<T> a, b; - Segment(Point<T> a, Point<T> b) : a(a), b(b) {} + Segment(Point<T> a, Point<T> b) : a(a), b(b) {} - double dist(Point<T> p) { - return (a - b).cross(p - b)/sqrt((b - a).dot(b - a)); - } + double dist(Point<T> p) { + return (a - b).cross(p - b)/sqrt((b - a).dot(b - a)); + } }; vector<Point<>> convex_hull(vector<Point<>> &v) { - int k = 0; - vector<Point<>> ans(v.size() * 2); + int k = 0; + vector<Point<>> ans(v.size() * 2); - sort(all(v), [](const Point<> &a, const Point<> &b) { - return (a.x == b.x) ? (a.y < b.y) : (a.x < b.x); - }); + sort(all(v), [](const Point<> &a, const Point<> &b) { + return (a.x == b.x) ? (a.y < b.y) : (a.x < b.x); + }); - for (int i = 0; i < v.size(); ++i) { - for (; k >= 2 && cw(ans[k-2], ans[k-1], v[i]); --k); - ans[k++] = v[i]; - } + for (int i = 0; i < v.size(); ++i) { + for (; k >= 2 && cw(ans[k-2], ans[k-1], v[i]); --k); + ans[k++] = v[i]; + } - for (int i = v.size() - 2, t = k + 1; i >= 0; --i) { - for (; k >= t && cw(ans[k-2], ans[k-1], v[i]); --k); - ans[k++] = v[i]; - } + for (int i = v.size() - 2, t = k + 1; i >= 0; --i) { + for (; k >= t && cw(ans[k-2], ans[k-1], v[i]); --k); + ans[k++] = v[i]; + } - ans.resize(k); - return ans; + ans.resize(k); + return ans; } double width(vector<Point<>> &v) { - vector<Point<>> h = convex_hull(v); + vector<Point<>> h = convex_hull(v); - int n = h.size() - 1; - double ans = 1e14; + int n = h.size() - 1; + double ans = 1e14; - h[0] = h[n]; - for (int i = 1, j = 1; i <= n; ++i) { - while ((h[i] - h[i-1]).cross(h[j%n+1] - h[i-1]) > - (h[i] - h[i-1]).cross(h[j] - h[i-1])) - j = j % n + 1; + h[0] = h[n]; + for (int i = 1, j = 1; i <= n; ++i) { + while ((h[i] - h[i-1]).cross(h[j%n+1] - h[i-1]) > + (h[i] - h[i-1]).cross(h[j] - h[i-1])) + j = j % n + 1; - Segment<> seg(h[i], h[i-1]); - ans = min(ans, seg.dist(h[j])); - } + Segment<> seg(h[i], h[i-1]); + ans = min(ans, seg.dist(h[j])); + } - return ceil(ans*100)/100; + return ceil(ans*100)/100; } int main() { - ios::sync_with_stdio(0); - cin.tie(0); - cout << setprecision(2) << fixed; + ios::sync_with_stdio(0); + cin.tie(0); + cout << setprecision(2) << fixed; - int n, cas = 1; - while (cin >> n && n) { - vector<Point<>> v(n); - for (int i = 0; i < n; ++i) - cin >> v[i].x >> v[i].y; + int n, cas = 1; + while (cin >> n && n) { + vector<Point<>> v(n); + for (int i = 0; i < n; ++i) + cin >> v[i].x >> v[i].y; - cout << "Case " << cas << ": " << width(v) << ende; - cas++; - } + cout << "Case " << cas << ": " << width(v) << ende; + cas++; + } - return 0; + return 0; } diff --git a/contests/Cadernaveis/LA5220.cpp b/contests/Cadernaveis/LA5220.cpp index 0a1d6a3..eef3ebc 100644 --- a/contests/Cadernaveis/LA5220.cpp +++ b/contests/Cadernaveis/LA5220.cpp @@ -30,75 +30,75 @@ int graph[MAX][MAX], rg[MAX][MAX]; bool cont[MAX]; bool path(int s, int t) { - queue<int> Q; - Q.push(s); - cont[s] = true; - - while (!Q.empty()) { - int u = Q.front(); Q.pop(); - - if (u == t) - return true; - - for (int i = 0; i < N; ++i) - if (!cont[i] && rg[u][i]) { - cont[i] = true; - par[i] = u; - Q.push(i); - } - } + queue<int> Q; + Q.push(s); + cont[s] = true; + + while (!Q.empty()) { + int u = Q.front(); Q.pop(); + + if (u == t) + return true; + + for (int i = 0; i < N; ++i) + if (!cont[i] && rg[u][i]) { + cont[i] = true; + par[i] = u; + Q.push(i); + } + } - return false; + return false; } int edmonds_karp(int s, int t) { - int ans = 0; - par[s] = -1; + int ans = 0; + par[s] = -1; - mset(cont, 0); - memcpy(rg, graph, sizeof(graph)); + mset(cont, 0); + memcpy(rg, graph, sizeof(graph)); - while (path(s, t)) { - int flow = inf; + while (path(s, t)) { + int flow = inf; - for (int i = t; par[i] != -1; i = par[i]) - flow = min(flow, rg[par[i]][i]); + for (int i = t; par[i] != -1; i = par[i]) + flow = min(flow, rg[par[i]][i]); - for (int i = t; par[i] != -1; i = par[i]) { - rg[par[i]][i] -= flow; - rg[i][par[i]] += flow; - } + for (int i = t; par[i] != -1; i = par[i]) { + rg[par[i]][i] -= flow; + rg[i][par[i]] += flow; + } - ans += flow; - mset(cont, 0); - } + ans += flow; + mset(cont, 0); + } - return ans; + return ans; } int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n, cas = 1; - while (cin >> n && n) { - N = n; - int s, t, c; cin >> s >> t >> c; - - mset(graph, 0); - for (int i = 0; i < c; ++i) { - int o, d, ca; cin >> o >> d >> ca; - o--, d--; - graph[o][d] += ca; - graph[d][o] += ca; + ios::sync_with_stdio(0); + cin.tie(0); + + int n, cas = 1; + while (cin >> n && n) { + N = n; + int s, t, c; cin >> s >> t >> c; + + mset(graph, 0); + for (int i = 0; i < c; ++i) { + int o, d, ca; cin >> o >> d >> ca; + o--, d--; + graph[o][d] += ca; + graph[d][o] += ca; + } + + cout << "Network " << cas++ << ende; + cout << "The bandwidth is " << edmonds_karp(s-1, t-1) << "." << ende; + cout << ende; } - cout << "Network " << cas++ << ende; - cout << "The bandwidth is " << edmonds_karp(s-1, t-1) << "." << ende; - cout << ende; - } - - return 0; + return 0; } diff --git a/contests/Cadernaveis/MANUT.cpp b/contests/Cadernaveis/MANUT.cpp index a4e6b9e..bf7bccf 100644 --- a/contests/Cadernaveis/MANUT.cpp +++ b/contests/Cadernaveis/MANUT.cpp @@ -30,71 +30,71 @@ int low[MAX]; vector<int> articulations; void dfs(int x) { - int child = 0; - visited[x] = 1; + int child = 0; + visited[x] = 1; - for (auto i : graph[x]) { - if (!visited[i]) { - child++; - parent[i] = x; + for (auto i : graph[x]) { + if (!visited[i]) { + child++; + parent[i] = x; - low[i] = L[i] = L[x] + 1; - dfs(i); + low[i] = L[i] = L[x] + 1; + dfs(i); - low[x] = min(low[x], low[i]); + low[x] = min(low[x], low[i]); - if ((parent[x] == -1 && child > 1) || - (parent[x] != -1 && low[i] >= L[x])) - articulations.pb(x); + if ((parent[x] == -1 && child > 1) || + (parent[x] != -1 && low[i] >= L[x])) + articulations.pb(x); - } else if (parent[x] != i) - low[x] = min(low[x], L[i]); - } + } else if (parent[x] != i) + low[x] = min(low[x], L[i]); + } } void tarjan(int n) { - mset(L, 0); - mset(visited, 0); - mset(parent, -1); - articulations.clear(); + mset(L, 0); + mset(visited, 0); + mset(parent, -1); + articulations.clear(); - dfs(n); + dfs(n); - sort(all(articulations)); - articulations.erase(unique(all(articulations)), articulations.end()); + sort(all(articulations)); + articulations.erase(unique(all(articulations)), articulations.end()); } int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n, m; - int cas = 1; - while (cin >> n >> m && (n || m)) { - for (int i = 0; i < n; ++i) - graph[i].clear(); - - for (int i = 0; i < m; ++i) { - int x, y; cin >> x >> y; - x--, y--; - graph[x].pb(y); - graph[y].pb(x); - } - - tarjan(0); - cout << "Teste " << cas << ende; - if (!articulations.size()) - cout << "nenhum" << ende; - else { - for (auto i : articulations) - cout << i + 1 << " "; - cout << ende; + ios::sync_with_stdio(0); + cin.tie(0); + + int n, m; + int cas = 1; + while (cin >> n >> m && (n || m)) { + for (int i = 0; i < n; ++i) + graph[i].clear(); + + for (int i = 0; i < m; ++i) { + int x, y; cin >> x >> y; + x--, y--; + graph[x].pb(y); + graph[y].pb(x); + } + + tarjan(0); + cout << "Teste " << cas << ende; + if (!articulations.size()) + cout << "nenhum" << ende; + else { + for (auto i : articulations) + cout << i + 1 << " "; + cout << ende; + } + + cas++; + cout << ende; } - cas++; - cout << ende; - } - - return 0; + return 0; } diff --git a/contests/Cadernaveis/MCAIRO.cpp b/contests/Cadernaveis/MCAIRO.cpp index 74c43a0..d6e5a4e 100644 --- a/contests/Cadernaveis/MCAIRO.cpp +++ b/contests/Cadernaveis/MCAIRO.cpp @@ -22,50 +22,50 @@ using ll = long long; using ii = pair<int,int>; struct BIT2D { - int N, M; - vector<vector<int>> tree; - - BIT2D(int N, int M) : - N(N), M(M), tree(N, vector<int>(M)) - { init(); } - - void init() { - for (auto &i : tree) - fill(all(i), 0); - } - - int query(int idx, int idy) { - int sum = 0; - for (; idx > 0; idx -= (idx & -idx)) - for (int m = idy; m > 0; m -= (m & -m)) - sum = max(sum, tree[idx][m]); - return sum; - } - - void update(int idx, int idy, int val) { - for (; idx < N; idx += (idx & -idx)) - for (int m = idy; m < M; m += (m & -m)) - tree[idx][m] = max(tree[idx][m], val); - } + int N, M; + vector<vector<int>> tree; + + BIT2D(int N, int M) : + N(N), M(M), tree(N, vector<int>(M)) + { init(); } + + void init() { + for (auto &i : tree) + fill(all(i), 0); + } + + int query(int idx, int idy) { + int sum = 0; + for (; idx > 0; idx -= (idx & -idx)) + for (int m = idy; m > 0; m -= (m & -m)) + sum = max(sum, tree[idx][m]); + return sum; + } + + void update(int idx, int idy, int val) { + for (; idx < N; idx += (idx & -idx)) + for (int m = idy; m < M; m += (m & -m)) + tree[idx][m] = max(tree[idx][m], val); + } }; int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - int t; cin >> t; - for (int cas = 1; cas <= t; ++cas) { - BIT2D bit(1001, 1001); + int t; cin >> t; + for (int cas = 1; cas <= t; ++cas) { + BIT2D bit(1001, 1001); - int n; cin >> n; - vector<int> x(n), y(n); - for (int i = 0; i < n; ++i) - cin >> x[i] >> y[i]; + int n; cin >> n; + vector<int> x(n), y(n); + for (int i = 0; i < n; ++i) + cin >> x[i] >> y[i]; - for (int i = 0; i < n; ++i) - bit.update(x[i], y[i], 1 + bit.query(x[i], y[i])); - cout << bit.query(1000, 1000) << ende; - } + for (int i = 0; i < n; ++i) + bit.update(x[i], y[i], 1 + bit.query(x[i], y[i])); + cout << bit.query(1000, 1000) << ende; + } - return 0; + return 0; } diff --git a/contests/Cadernaveis/NTICKETS.cpp b/contests/Cadernaveis/NTICKETS.cpp index 46ca3dd..d25db6f 100644 --- a/contests/Cadernaveis/NTICKETS.cpp +++ b/contests/Cadernaveis/NTICKETS.cpp @@ -30,86 +30,86 @@ ll h[MAX]; ll par[MAX][MAXLOG], cost[MAX][MAXLOG]; void dfs(int v, int p = -1, ll c = 0) { - par[v][0] = p; - cost[v][0] = c; + par[v][0] = p; + cost[v][0] = c; - if (p + 1) - h[v] = h[p] + 1; + if (p + 1) + h[v] = h[p] + 1; - for (int i = 1; i < MAXLOG; ++i) - if (par[v][i - 1] + 1) { - par[v][i] = par[par[v][i - 1]][i - 1]; - cost[v][i] = max(cost[v][i], max(cost[par[v][i-1]][i-1], cost[v][i-1])); - } + for (int i = 1; i < MAXLOG; ++i) + if (par[v][i - 1] + 1) { + par[v][i] = par[par[v][i - 1]][i - 1]; + cost[v][i] = max(cost[v][i], max(cost[par[v][i-1]][i-1], cost[v][i-1])); + } - for (auto u : graph[v]) - if (p != u.fi) - dfs(u.fi, v, u.se); + for (auto u : graph[v]) + if (p != u.fi) + dfs(u.fi, v, u.se); } void preprocess(int v) { - memset(par, -1, sizeof par); - memset(cost, 0, sizeof cost); - dfs(v); + memset(par, -1, sizeof par); + memset(cost, 0, sizeof cost); + dfs(v); } ll query(int p, int q) { - ll ans = 0; + ll ans = 0; - if (h[p] < h[q]) - swap(p, q); + if (h[p] < h[q]) + swap(p, q); - for (int i = MAXLOG - 1; i >= 0; --i) - if (par[p][i] + 1 && h[par[p][i]] >= h[q]) { - ans = max(ans, cost[p][i]); - p = par[p][i]; - } + for (int i = MAXLOG - 1; i >= 0; --i) + if (par[p][i] + 1 && h[par[p][i]] >= h[q]) { + ans = max(ans, cost[p][i]); + p = par[p][i]; + } - if (p == q) - return ans; + if (p == q) + return ans; - for (int i = MAXLOG - 1; i >= 0; --i) - if (par[p][i] + 1 && par[p][i] != par[q][i]) { - ans = max(ans, max(cost[p][i], cost[q][i])); - p = par[p][i]; - q = par[q][i]; - } + for (int i = MAXLOG - 1; i >= 0; --i) + if (par[p][i] + 1 && par[p][i] != par[q][i]) { + ans = max(ans, max(cost[p][i], cost[q][i])); + p = par[p][i]; + q = par[q][i]; + } - if (p == q) return ans; - else return max(ans, max(cost[p][0], cost[q][0])); + if (p == q) return ans; + else return max(ans, max(cost[p][0], cost[q][0])); } int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n, a, b; - ll t; - - while (cin >> n && n) { - for (int i = 0; i <= n; ++i) - graph[i].clear(); - - for (int i = 0; i < n - 1; ++i) { - cin >> a >> b >> t; - a--, b--; - graph[a].pb(ii(b, t)); - graph[b].pb(ii(a, t)); - } - - int q; - preprocess(0); - - cin >> q; - for (int i = 0; i < q; ++i) { - cin >> a >> b; - a--, b--; - cout << query(a, b) << '\n'; + ios::sync_with_stdio(0); + cin.tie(0); + + int n, a, b; + ll t; + + while (cin >> n && n) { + for (int i = 0; i <= n; ++i) + graph[i].clear(); + + for (int i = 0; i < n - 1; ++i) { + cin >> a >> b >> t; + a--, b--; + graph[a].pb(ii(b, t)); + graph[b].pb(ii(a, t)); + } + + int q; + preprocess(0); + + cin >> q; + for (int i = 0; i < q; ++i) { + cin >> a >> b; + a--, b--; + cout << query(a, b) << '\n'; + } + cout << '\n'; } - cout << '\n'; - } - return 0; + return 0; } diff --git a/contests/Cadernaveis/ORKUT.cpp b/contests/Cadernaveis/ORKUT.cpp index 52f7901..97d19cf 100644 --- a/contests/Cadernaveis/ORKUT.cpp +++ b/contests/Cadernaveis/ORKUT.cpp @@ -25,94 +25,94 @@ using ii = pair<int,int>; vector<int> graph[MAX]; struct TopologicalSort { - int N; - stack<int> S; - vector<int> cont; - - TopologicalSort(int N) : - N(N), cont(N) - {} - - void init() { - fill(all(cont), 0); - } - - bool dfs(int x) { - cont[x] = 1; - - for (auto i : graph[x]) { - if (cont[i] == 1) - return true; - if (!cont[i] && dfs(i)) - return true; + int N; + stack<int> S; + vector<int> cont; + + TopologicalSort(int N) : + N(N), cont(N) + {} + + void init() { + fill(all(cont), 0); } - cont[x] = 2; - S.push(x); + bool dfs(int x) { + cont[x] = 1; - return false; - } + for (auto i : graph[x]) { + if (cont[i] == 1) + return true; + if (!cont[i] && dfs(i)) + return true; + } - bool run(vector<int> &tsort) { - init(); + cont[x] = 2; + S.push(x); - bool cycle = false; - for (int i = 0; i < N; ++i) { - if (!cont[i]) - cycle |= dfs(i); + return false; } - if (cycle) - return true; + bool run(vector<int> &tsort) { + init(); - while (!S.empty()) { - tsort.pb(S.top()); - S.pop(); - } + bool cycle = false; + for (int i = 0; i < N; ++i) { + if (!cont[i]) + cycle |= dfs(i); + } - return false; - } -}; + if (cycle) + return true; -int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n; - for (int cas = 1; cin >> n && n; ++cas) { - for (int i = 0; i < MAX; ++i) - graph[i].clear(); - - vector<string> v(n); - map<string,int> M; - for (int i = 0; i < n; ++i) { - cin >> v[i]; - M[v[i]] = i; - } + while (!S.empty()) { + tsort.pb(S.top()); + S.pop(); + } - for (int i = 0; i < n; ++i) { - string a; cin >> a; - int m; cin >> m; - for (int j = 0; j < m; ++j) { - string b; cin >> b; - graph[M[b]].pb(M[a]); - } + return false; } +}; - TopologicalSort ts(n); - vector<int> ans; - bool cycle = ts.run(ans); - - cout << "Teste " << cas << ende; - if (cycle) - cout << "impossivel" << ende; - else { - for (auto i : ans) - cout << v[i] << " "; - cout << ende; +int main() { + ios::sync_with_stdio(0); + cin.tie(0); + + int n; + for (int cas = 1; cin >> n && n; ++cas) { + for (int i = 0; i < MAX; ++i) + graph[i].clear(); + + vector<string> v(n); + map<string,int> M; + for (int i = 0; i < n; ++i) { + cin >> v[i]; + M[v[i]] = i; + } + + for (int i = 0; i < n; ++i) { + string a; cin >> a; + int m; cin >> m; + for (int j = 0; j < m; ++j) { + string b; cin >> b; + graph[M[b]].pb(M[a]); + } + } + + TopologicalSort ts(n); + vector<int> ans; + bool cycle = ts.run(ans); + + cout << "Teste " << cas << ende; + if (cycle) + cout << "impossivel" << ende; + else { + for (auto i : ans) + cout << v[i] << " "; + cout << ende; + } + cout << ende; } - cout << ende; - } - return 0; + return 0; } diff --git a/contests/Cadernaveis/TOPOLAND.cpp b/contests/Cadernaveis/TOPOLAND.cpp index 8b8b1bf..fbdb9a3 100644 --- a/contests/Cadernaveis/TOPOLAND.cpp +++ b/contests/Cadernaveis/TOPOLAND.cpp @@ -26,84 +26,84 @@ typedef pair<int,int> ii; ll N, tree[4 * MAX], v[MAX]; void build_tree(int node = 1, int a = 0, int b = N) { - if (a > b) - return; + if (a > b) + return; - if (a == b) { - tree[node] = v[a]; - return; - } + if (a == b) { + tree[node] = v[a]; + return; + } - build_tree(node * 2, a, (a + b) / 2); - build_tree(node * 2 + 1, 1 + (a + b) / 2, b); + build_tree(node * 2, a, (a + b) / 2); + build_tree(node * 2 + 1, 1 + (a + b) / 2, b); - tree[node] = max(tree[node * 2], tree[node * 2 + 1]); + tree[node] = max(tree[node * 2], tree[node * 2 + 1]); } void update_tree(int idx, ll val, int node = 1, int a = 0, int b = N) { - if (a > b || a > idx || b < idx) - return; + if (a > b || a > idx || b < idx) + return; - if (a == b) { - tree[node] = val; - return; - } + if (a == b) { + tree[node] = val; + return; + } - update_tree(idx, val, node * 2, a, (a + b) / 2); - update_tree(idx, val, node * 2 + 1, 1 + (a + b) / 2, b); + update_tree(idx, val, node * 2, a, (a + b) / 2); + update_tree(idx, val, node * 2 + 1, 1 + (a + b) / 2, b); - tree[node] = max(tree[node * 2], tree[node * 2 + 1]); + tree[node] = max(tree[node * 2], tree[node * 2 + 1]); } int query_tree(int i, int j, int node = 1, int a = 0, int b = N) { - if (a > b || a > j || b < i) - return 0; + if (a > b || a > j || b < i) + return 0; - if (a >= i && b <= j) - return tree[node]; + if (a >= i && b <= j) + return tree[node]; - int res1 = query_tree(i, j, node * 2, a, (a + b) / 2); - int res2 = query_tree(i, j, node * 2 + 1, 1 + (a + b) / 2, b); + int res1 = query_tree(i, j, node * 2, a, (a + b) / 2); + int res2 = query_tree(i, j, node * 2 + 1, 1 + (a + b) / 2, b); - return max(res1, res2); + return max(res1, res2); } int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - ll t, n, m; - cin >> t; - for (int cas = 0; cas < t; ++cas) { - cout << "Testcase " << cas << ":\n"; - cin >> n >> m; - N = n; - - for (int i = 0; i < n; ++i) - cin >> v[i]; - build_tree(); - - ll q, a, b; - string op; - cin >> q; - for (int i = 0; i < q; ++i) { - cin >> op; - if (op[0] == 'A') { - cin >> a; - m += a; - } else if (op[0] == 'B') { - cin >> a >> b; - update_tree(a, b); - } else { - cin >> a >> b; - cout << abs(m - query_tree(a, b)) << '\n'; - } + ios::sync_with_stdio(0); + cin.tie(0); + + ll t, n, m; + cin >> t; + for (int cas = 0; cas < t; ++cas) { + cout << "Testcase " << cas << ":\n"; + cin >> n >> m; + N = n; + + for (int i = 0; i < n; ++i) + cin >> v[i]; + build_tree(); + + ll q, a, b; + string op; + cin >> q; + for (int i = 0; i < q; ++i) { + cin >> op; + if (op[0] == 'A') { + cin >> a; + m += a; + } else if (op[0] == 'B') { + cin >> a >> b; + update_tree(a, b); + } else { + cin >> a >> b; + cout << abs(m - query_tree(a, b)) << '\n'; + } + } + cout << '\n'; } - cout << '\n'; - } - return 0; + return 0; } diff --git a/contests/Cadernaveis/TUBOS.cpp b/contests/Cadernaveis/TUBOS.cpp index 7a6307b..1313f07 100644 --- a/contests/Cadernaveis/TUBOS.cpp +++ b/contests/Cadernaveis/TUBOS.cpp @@ -30,54 +30,54 @@ int low[MAX]; vector<ii> bridges; void dfs(int x) { - int child = 0; - visited[x] = 1; + int child = 0; + visited[x] = 1; - for (auto i : graph[x]) { - if (!visited[i]) { - child++; - parent[i] = x; + for (auto i : graph[x]) { + if (!visited[i]) { + child++; + parent[i] = x; - low[i] = L[i] = L[x] + 1; - dfs(i); + low[i] = L[i] = L[x] + 1; + dfs(i); - low[x] = min(low[x], low[i]); + low[x] = min(low[x], low[i]); - if (low[i] > L[x]) - bridges.pb(ii(x, i)); + if (low[i] > L[x]) + bridges.pb(ii(x, i)); - } else if (parent[x] != i) - low[x] = min(low[x], L[i]); - } + } else if (parent[x] != i) + low[x] = min(low[x], L[i]); + } } void tarjan(int n) { - mset(visited, 0); - mset(parent, -1); - mset(L, 0); - bridges.clear(); - dfs(n); + mset(visited, 0); + mset(parent, -1); + mset(L, 0); + bridges.clear(); + dfs(n); } int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n, m; - while (cin >> n >> m && (n || m)) { - for (int i = 0; i < n; ++i) - graph[i].clear(); - - for (int i = 0; i < m; ++i) { - int x, y; cin >> x >> y; - x--, y--; - graph[x].pb(y); - graph[y].pb(x); + ios::sync_with_stdio(0); + cin.tie(0); + + int n, m; + while (cin >> n >> m && (n || m)) { + for (int i = 0; i < n; ++i) + graph[i].clear(); + + for (int i = 0; i < m; ++i) { + int x, y; cin >> x >> y; + x--, y--; + graph[x].pb(y); + graph[y].pb(x); + } + + tarjan(0); + cout << (bridges.size() ? "N" : "S") << ende; } - tarjan(0); - cout << (bridges.size() ? "N" : "S") << ende; - } - - return 0; + return 0; } diff --git a/contests/Cadernaveis/URI1033.cpp b/contests/Cadernaveis/URI1033.cpp index 11d69a4..7221c52 100644 --- a/contests/Cadernaveis/URI1033.cpp +++ b/contests/Cadernaveis/URI1033.cpp @@ -22,79 +22,79 @@ typedef unsigned long long ll; typedef pair<int,int> ii; struct matrix { - int N; - ll b; - vector<vector<ll>> m; - - matrix(int N, ll b) : N(N), b(b) { - m = vector<vector<ll>>(N, vector<ll>(N, 0)); - } - - matrix operator*(matrix a) { - matrix res(N, b); - for (int i = 0; i < N; i++) - for (int j = 0; j < N; j++) { - res[i][j] = 0; - - for (int k = 0; k < N; k++) - res[i][j] = (((m[i][k] * a[k][j]) % b) + res[i][j]) % b; - } - - return res; - } - - void to_identity() { - for (auto &i : m) - fill(all(i), 0); - for (int i = 0; i < N; ++i) - m[i][i] = 1; - } - - vector<ll> &operator[](int i) { - return m[i]; - } + int N; + ll b; + vector<vector<ll>> m; + + matrix(int N, ll b) : N(N), b(b) { + m = vector<vector<ll>>(N, vector<ll>(N, 0)); + } + + matrix operator*(matrix a) { + matrix res(N, b); + for (int i = 0; i < N; i++) + for (int j = 0; j < N; j++) { + res[i][j] = 0; + + for (int k = 0; k < N; k++) + res[i][j] = (((m[i][k] * a[k][j]) % b) + res[i][j]) % b; + } + + return res; + } + + void to_identity() { + for (auto &i : m) + fill(all(i), 0); + for (int i = 0; i < N; ++i) + m[i][i] = 1; + } + + vector<ll> &operator[](int i) { + return m[i]; + } }; ll fast_pow(matrix in, ll n, ll b) { - matrix ans(2, b); - ans.to_identity(); + matrix ans(2, b); + ans.to_identity(); - while (n) { - if (n & 1) - ans = ans * in; + while (n) { + if (n & 1) + ans = ans * in; - n >>= 1; - in = in * in; - } + n >>= 1; + in = in * in; + } - return ans[0][0]; + return ans[0][0]; } ll solve(ll n, ll b) { - matrix in(2, b); + matrix in(2, b); - in[0][0] = 1; - in[0][1] = 1; + in[0][0] = 1; + in[0][1] = 1; - in[1][0] = 1; - in[1][1] = 0; + in[1][0] = 1; + in[1][1] = 0; - return fast_pow(in, n, b); + return fast_pow(in, n, b); } int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - ll n, b; - int cas = 1; - while (cin >> n >> b && (n || b)) { - ll ans = solve(n, b) % b; - ans = (ans + ans) % b; - ans = (ans - 1 + b) % b; + ll n, b; + int cas = 1; + while (cin >> n >> b && (n || b)) { + ll ans = solve(n, b) % b; + ans = (ans + ans) % b; + ans = (ans - 1 + b) % b; - cout << "Case " << cas++ << ":" << " " << n << " " << b << " " << ans << ende; - } + cout << "Case " << cas++ << ":" << " " << n << " " << b << " " << ans << ende; + } - return 0; + return 0; } diff --git a/contests/Cadernaveis/URI1128.cpp b/contests/Cadernaveis/URI1128.cpp index 4d8c55b..251641f 100644 --- a/contests/Cadernaveis/URI1128.cpp +++ b/contests/Cadernaveis/URI1128.cpp @@ -35,71 +35,71 @@ int low[MAX]; vector<int> scc[MAX]; void dfs(int x) { - id[x] = low[x] = ind++; - visited[x] = 1; + id[x] = low[x] = ind++; + visited[x] = 1; - S.push(x); + S.push(x); - for (auto i : graph[x]) - if (id[i] == -1) { - dfs(i); + for (auto i : graph[x]) + if (id[i] == -1) { + dfs(i); - low[x] = min(low[x], low[i]); + low[x] = min(low[x], low[i]); - } else if (visited[i]) - low[x] = min(low[x], id[i]); + } else if (visited[i]) + low[x] = min(low[x], id[i]); - if (low[x] == id[x]) { - int w; + if (low[x] == id[x]) { + int w; - do { - w = S.top(); S.pop(); - visited[w] = 0; - scc[ncomp].pb(w); - } while (w != x); + do { + w = S.top(); S.pop(); + visited[w] = 0; + scc[ncomp].pb(w); + } while (w != x); - ncomp++; - } + ncomp++; + } } int tarjan(int n) { - mset(id, -1); - ncomp = ind = 0; + mset(id, -1); + ncomp = ind = 0; - for (int i = 0; i < n; ++i) - scc[i].clear(); + for (int i = 0; i < n; ++i) + scc[i].clear(); - for (int i = 0; i < n; ++i) - if (id[i] == -1) - dfs(i); + for (int i = 0; i < n; ++i) + if (id[i] == -1) + dfs(i); - return ncomp; + return ncomp; } int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n, m; - while (cin >> n >> m && (n || m)) { - for (int i = 0; i < n; ++i) - graph[i].clear(); - - for (int i = 0; i < m; ++i) { - int v, w, p; cin >> v >> w >> p; - v--, w--; - if (p == 1) - graph[v].pb(w); - else { - graph[v].pb(w); - graph[w].pb(v); - } + ios::sync_with_stdio(0); + cin.tie(0); + + int n, m; + while (cin >> n >> m && (n || m)) { + for (int i = 0; i < n; ++i) + graph[i].clear(); + + for (int i = 0; i < m; ++i) { + int v, w, p; cin >> v >> w >> p; + v--, w--; + if (p == 1) + graph[v].pb(w); + else { + graph[v].pb(w); + graph[w].pb(v); + } + } + + int ans = tarjan(n); + cout << (ans == 1) << ende; } - int ans = tarjan(n); - cout << (ans == 1) << ende; - } - - return 0; + return 0; } diff --git a/contests/Cadernaveis/URI1130.cpp b/contests/Cadernaveis/URI1130.cpp index 3b235dd..d04e4a8 100644 --- a/contests/Cadernaveis/URI1130.cpp +++ b/contests/Cadernaveis/URI1130.cpp @@ -25,54 +25,54 @@ using ii = pair<int,int>; int dp[MAX]; int solve(int n) { - if (n < 5) return 0; - if (dp[n] != -1) return dp[n]; - - vector<int> foi(MAX, 0); - for (int i = 2; i < n - 2; ++i) - foi[solve(i) ^ solve(n - i - 1)] = 1; - - for (int i = 0; i < MAX; ++i) - if (!foi[i]) - return dp[n] = i; - - assert(false); - return -1; -} + if (n < 5) return 0; + if (dp[n] != -1) return dp[n]; -int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n; - mset(dp, -1); - while (cin >> n && n) { - string s; cin >> s; - - bool poss = false; - for (int i = 0; i < n - 1; ++i) - poss |= (s[i] == 'X' && s[i+1] == 'X'); - for (int i = 0; i < n - 2; ++i) - poss |= (s[i] == 'X' && s[i+2] == 'X'); - - if (poss) { - cout << 'S' << ende; - continue; - } + vector<int> foi(MAX, 0); + for (int i = 2; i < n - 2; ++i) + foi[solve(i) ^ solve(n - i - 1)] = 1; - int last = -1, ans = 0; - for (int i = 0; i < n; ++i) - if (s[i] == 'X') { - if (last == -1) ans ^= solve(2 + i); - else ans ^= solve(i - last - 1); - last = i; - } + for (int i = 0; i < MAX; ++i) + if (!foi[i]) + return dp[n] = i; - if (last == -1) ans ^= solve(2 + n + 2); - else ans ^= solve((n - last - 1) + 2); + assert(false); + return -1; +} - cout << (ans ? 'S' : 'N') << ende; - } +int main() { + ios::sync_with_stdio(0); + cin.tie(0); + + int n; + mset(dp, -1); + while (cin >> n && n) { + string s; cin >> s; + + bool poss = false; + for (int i = 0; i < n - 1; ++i) + poss |= (s[i] == 'X' && s[i+1] == 'X'); + for (int i = 0; i < n - 2; ++i) + poss |= (s[i] == 'X' && s[i+2] == 'X'); + + if (poss) { + cout << 'S' << ende; + continue; + } + + int last = -1, ans = 0; + for (int i = 0; i < n; ++i) + if (s[i] == 'X') { + if (last == -1) ans ^= solve(2 + i); + else ans ^= solve(i - last - 1); + last = i; + } + + if (last == -1) ans ^= solve(2 + n + 2); + else ans ^= solve((n - last - 1) + 2); + + cout << (ans ? 'S' : 'N') << ende; + } - return 0; + return 0; } diff --git a/contests/Cadernaveis/URI1135.cpp b/contests/Cadernaveis/URI1135.cpp index a0395db..8b3409d 100644 --- a/contests/Cadernaveis/URI1135.cpp +++ b/contests/Cadernaveis/URI1135.cpp @@ -30,81 +30,81 @@ ll h[MAX]; ll par[MAX][MAXLOG], cost[MAX][MAXLOG]; void dfs(int v, int p = -1, ll c = 0) { - par[v][0] = p; - cost[v][0] = c; + par[v][0] = p; + cost[v][0] = c; - if (p + 1) - h[v] = h[p] + 1; + if (p + 1) + h[v] = h[p] + 1; - for (int i = 1; i < MAXLOG; ++i) - if (par[v][i - 1] + 1) { - par[v][i] = par[par[v][i - 1]][i - 1]; - cost[v][i] += cost[v][i - 1] + cost[par[v][i - 1]][i - 1]; - } + for (int i = 1; i < MAXLOG; ++i) + if (par[v][i - 1] + 1) { + par[v][i] = par[par[v][i - 1]][i - 1]; + cost[v][i] += cost[v][i - 1] + cost[par[v][i - 1]][i - 1]; + } - for (auto u : graph[v]) - if (p != u.fi) - dfs(u.fi, v, u.se); + for (auto u : graph[v]) + if (p != u.fi) + dfs(u.fi, v, u.se); } void preprocess(int v) { - memset(par, -1, sizeof par); - memset(cost, 0, sizeof cost); - dfs(v); + memset(par, -1, sizeof par); + memset(cost, 0, sizeof cost); + dfs(v); } ll query(int p, int q) { - ll ans = 0; + ll ans = 0; - if (h[p] < h[q]) - swap(p, q); + if (h[p] < h[q]) + swap(p, q); - for (int i = MAXLOG - 1; i >= 0; --i) - if (par[p][i] + 1 && h[par[p][i]] >= h[q]) { - ans += cost[p][i]; - p = par[p][i]; - } + for (int i = MAXLOG - 1; i >= 0; --i) + if (par[p][i] + 1 && h[par[p][i]] >= h[q]) { + ans += cost[p][i]; + p = par[p][i]; + } - if (p == q) - return ans; + if (p == q) + return ans; - for (int i = MAXLOG - 1; i >= 0; --i) - if (par[p][i] + 1 && par[p][i] != par[q][i]) { - ans += cost[p][i] + cost[q][i]; - p = par[p][i]; - q = par[q][i]; - } + for (int i = MAXLOG - 1; i >= 0; --i) + if (par[p][i] + 1 && par[p][i] != par[q][i]) { + ans += cost[p][i] + cost[q][i]; + p = par[p][i]; + q = par[q][i]; + } - if (p == q) return ans; - else return ans + cost[p][0] + cost[q][0]; + if (p == q) return ans; + else return ans + cost[p][0] + cost[q][0]; } int main() { - ll li; - int ai, n; - int q, s, t; - - while (scanf("%d", &n) && n) { - for (int i = 0; i < n + 1; ++i) - graph[i].clear(); - - for (int i = 1; i <= n - 1; ++i) { - scanf("%d %lld", &ai, &li); - graph[ai].pb(ii(i, li)); - } - - preprocess(0); - - scanf("%d", &q); - for (int i = 0; i < q; ++i) { - scanf("%d %d", &s, &t); - if (i) printf(" "); - printf("%lld", query(s, t)); + ll li; + int ai, n; + int q, s, t; + + while (scanf("%d", &n) && n) { + for (int i = 0; i < n + 1; ++i) + graph[i].clear(); + + for (int i = 1; i <= n - 1; ++i) { + scanf("%d %lld", &ai, &li); + graph[ai].pb(ii(i, li)); + } + + preprocess(0); + + scanf("%d", &q); + for (int i = 0; i < q; ++i) { + scanf("%d %d", &s, &t); + if (i) printf(" "); + printf("%lld", query(s, t)); + } + printf("\n"); } - printf("\n"); - } - return 0; + return 0; } diff --git a/contests/Cadernaveis/URI1141.cpp b/contests/Cadernaveis/URI1141.cpp index 395917e..a0440b9 100644 --- a/contests/Cadernaveis/URI1141.cpp +++ b/contests/Cadernaveis/URI1141.cpp @@ -22,64 +22,64 @@ using ll = long long; using ii = pair<int,int>; struct AhoCorasick { - struct Node { - int fail, occ; - vector<int> words; - map<char,int> next; - - Node() : fail(0), occ(-1) {} - int has(char i) { return next.count(i); } - int &operator[](char i) { return next[i]; } - }; - - vector<Node> trie; - - AhoCorasick(const vector<string> &v) { - trie.pb(Node()); - build(v); - preprocess(); - } - - int insert(const string &s) { - int n = 0; - for (int i = 0; i < s.size(); n = trie[n][s[i]], ++i) - if (!trie[n].has(s[i])) { - trie[n][s[i]] = trie.size(); + struct Node { + int fail, occ; + vector<int> words; + map<char,int> next; + + Node() : fail(0), occ(-1) {} + int has(char i) { return next.count(i); } + int &operator[](char i) { return next[i]; } + }; + + vector<Node> trie; + + AhoCorasick(const vector<string> &v) { trie.pb(Node()); - } - return n; - } - - void build(const vector<string> &v) { - for (int i = 0; i < v.size(); ++i) { - int n = insert(v[i]); - trie[n].words.pb(i); + build(v); + preprocess(); } - } - - inline int suffix(int v, char c) { - while (v != 0 && !trie[v].has(c)) v = trie[v].fail; - if (trie[v].has(c)) v = trie[v][c]; - return v; - } - - void preprocess() { - vector<int> Q = { 0 }; - for (int i = 0; i != Q.size(); ++i) { - int u = Q[i]; - for (auto j : trie[u].next) { - int &v = trie[j.se].fail; - if (u) { - v = suffix(trie[u].fail, j.fi); - trie[j.se].occ = trie[v].words.size() ? v : trie[v].occ; - } else { - v = trie[u].fail; - trie[j.se].occ = -1; + + int insert(const string &s) { + int n = 0; + for (int i = 0; i < s.size(); n = trie[n][s[i]], ++i) + if (!trie[n].has(s[i])) { + trie[n][s[i]] = trie.size(); + trie.pb(Node()); + } + return n; + } + + void build(const vector<string> &v) { + for (int i = 0; i < v.size(); ++i) { + int n = insert(v[i]); + trie[n].words.pb(i); + } + } + + inline int suffix(int v, char c) { + while (v != 0 && !trie[v].has(c)) v = trie[v].fail; + if (trie[v].has(c)) v = trie[v][c]; + return v; + } + + void preprocess() { + vector<int> Q = { 0 }; + for (int i = 0; i != Q.size(); ++i) { + int u = Q[i]; + for (auto j : trie[u].next) { + int &v = trie[j.se].fail; + if (u) { + v = suffix(trie[u].fail, j.fi); + trie[j.se].occ = trie[v].words.size() ? v : trie[v].occ; + } else { + v = trie[u].fail; + trie[j.se].occ = -1; + } + Q.pb(j.se); + } } - Q.pb(j.se); - } } - } }; int n; @@ -87,41 +87,41 @@ int dp[10101]; vector<string> v; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - while (cin >> n && n) { - v.clear(); - v.resize(n); - for (auto &i : v) - cin >> i; - - sort(all(v), [](const string &a, const string &b) { - return a.size() > b.size(); - }); - - AhoCorasick aho(v); - for (int i = n - 1; i >= 0; --i) { - int grt = 0, u = 0; - for (auto j : v[i]) { - u = aho.suffix(u, j); - for (auto k : aho.trie[u].words) - if (k != i) - grt = max(grt, dp[k] + 1); - - int x = u; - while (aho.trie[x].occ != -1) { - x = aho.trie[x].occ; - for (auto k : aho.trie[x].words) - if (k != i) - grt = max(grt, dp[k] + 1); + ios::sync_with_stdio(0); + cin.tie(0); + + while (cin >> n && n) { + v.clear(); + v.resize(n); + for (auto &i : v) + cin >> i; + + sort(all(v), [](const string &a, const string &b) { + return a.size() > b.size(); + }); + + AhoCorasick aho(v); + for (int i = n - 1; i >= 0; --i) { + int grt = 0, u = 0; + for (auto j : v[i]) { + u = aho.suffix(u, j); + for (auto k : aho.trie[u].words) + if (k != i) + grt = max(grt, dp[k] + 1); + + int x = u; + while (aho.trie[x].occ != -1) { + x = aho.trie[x].occ; + for (auto k : aho.trie[x].words) + if (k != i) + grt = max(grt, dp[k] + 1); + } + } + dp[i] = grt; } - } - dp[i] = grt; - } - cout << (*max_element(dp, dp + n) + 1) << ende; - } + cout << (*max_element(dp, dp + n) + 1) << ende; + } - return 0; + return 0; } diff --git a/contests/Cadernaveis/URI1356.cpp b/contests/Cadernaveis/URI1356.cpp index a9936ab..839e8a9 100644 --- a/contests/Cadernaveis/URI1356.cpp +++ b/contests/Cadernaveis/URI1356.cpp @@ -27,75 +27,75 @@ ll tree[MAX]; ll b, p, l, n; ll query(ll idx) { - ll sum = 0; - for (; idx > 0; idx -= (idx & -idx)) - sum = (sum + tree[idx] + p) % p; + ll sum = 0; + for (; idx > 0; idx -= (idx & -idx)) + sum = (sum + tree[idx] + p) % p; - return sum % p; + return sum % p; } void update(ll idx, ll val) { - for (; idx <= MAX; idx += (idx & -idx)) - tree[idx] = (tree[idx] + val + p) % p; + for (; idx <= MAX; idx += (idx & -idx)) + tree[idx] = (tree[idx] + val + p) % p; } ll power(ll x, ll y) { - ll ans = 1; + ll ans = 1; - while (y) { - if (y & 1) - ans = (ans * x) % p; + while (y) { + if (y & 1) + ans = (ans * x) % p; - y >>= 1; - x = (x * x) % p; - } + y >>= 1; + x = (x * x) % p; + } - return ans % p; + return ans % p; } ll mod_inverse(ll a) { - return power(a, p - 2); + return power(a, p - 2); } int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - while (cin >> b >> p >> l >> n && (b || p || l || n)) { - mset(tree, 0); + while (cin >> b >> p >> l >> n && (b || p || l || n)) { + mset(tree, 0); - vector<ll> powB(l + 1); powB[0] = 1; - for (int i = 1; i <= l; ++i) - powB[i] = (powB[i-1] * (b % p)) % p; + vector<ll> powB(l + 1); powB[0] = 1; + for (int i = 1; i <= l; ++i) + powB[i] = (powB[i-1] * (b % p)) % p; - for (int i = 0; i < n; ++i) { - string op; cin >> op; + for (int i = 0; i < n; ++i) { + string op; cin >> op; - if (op[0] == 'E') { - ll pos, val; cin >> pos >> val; + if (op[0] == 'E') { + ll pos, val; cin >> pos >> val; - // Remove current value from bit - update(pos, -((query(pos) - query(pos - 1) + p) % p)); + // Remove current value from bit + update(pos, -((query(pos) - query(pos - 1) + p) % p)); - // Insert new value into bit (val*b^(l-pos)) - update(pos, ((val % p) * powB[l - pos]) % p); - } else { - ll L, R; cin >> L >> R; + // Insert new value into bit (val*b^(l-pos)) + update(pos, ((val % p) * powB[l - pos]) % p); + } else { + ll L, R; cin >> L >> R; - // Get range sum - ll sum = (query(R) - query(L - 1) + p) % p; + // Get range sum + ll sum = (query(R) - query(L - 1) + p) % p; - // Result is (sum / b^(l-R)) % p - cout << (sum * mod_inverse(powB[l - R])) % p << ende; - } - } + // Result is (sum / b^(l-R)) % p + cout << (sum * mod_inverse(powB[l - R])) % p << ende; + } + } - cout << "-" << ende; - } + cout << "-" << ende; + } - return 0; + return 0; } diff --git a/contests/Cadernaveis/URI1364.cpp b/contests/Cadernaveis/URI1364.cpp index f3385d5..f07e730 100644 --- a/contests/Cadernaveis/URI1364.cpp +++ b/contests/Cadernaveis/URI1364.cpp @@ -23,39 +23,39 @@ typedef long long ll; typedef pair<int,int> ii; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n, m; - while (cin >> n >> m && (n || m)) { - vector<string> emo(n); - for (auto &i : emo) cin >> i; - cin.ignore(); - - int ans = 0; - for (int i = 0; i < m; ++i) { - string s; - getline(cin, s); - - for (int j = 0; j < s.sz; ++j) { - for (int k = 0; k < n; ++k) { - if (s[j] == emo[k].back()) { - for (int l = j, ll = emo[k].sz - 1; ll >= 0 && l >= 0; ll--, l--) { - if (s[l] != emo[k][ll]) - break; - - if (ll == 0) { - s[j] = ' '; - ans++; - } + ios::sync_with_stdio(0); + cin.tie(0); + + int n, m; + while (cin >> n >> m && (n || m)) { + vector<string> emo(n); + for (auto &i : emo) cin >> i; + cin.ignore(); + + int ans = 0; + for (int i = 0; i < m; ++i) { + string s; + getline(cin, s); + + for (int j = 0; j < s.sz; ++j) { + for (int k = 0; k < n; ++k) { + if (s[j] == emo[k].back()) { + for (int l = j, ll = emo[k].sz - 1; ll >= 0 && l >= 0; ll--, l--) { + if (s[l] != emo[k][ll]) + break; + + if (ll == 0) { + s[j] = ' '; + ans++; + } + } + } + } } - } } - } - } - cout << ans << ende; - } + cout << ans << ende; + } - return 0; + return 0; } diff --git a/contests/Cadernaveis/URI1464.cpp b/contests/Cadernaveis/URI1464.cpp index cdb8580..1112419 100644 --- a/contests/Cadernaveis/URI1464.cpp +++ b/contests/Cadernaveis/URI1464.cpp @@ -25,62 +25,62 @@ typedef pair<double,double> dd; double cross(dd a, dd b, dd c) { - return (b.fi - a.fi) * (c.se - a.se) - (b.se - a.se) * (c.fi - a.fi); + return (b.fi - a.fi) * (c.se - a.se) - (b.se - a.se) * (c.fi - a.fi); } int convex_hull(vector<dd> &v) { - int k = 0; - vector<int> ans(v.sz * 2); + int k = 0; + vector<int> ans(v.sz * 2); - sort(v.begin(), v.end(), [](const dd &a, const dd &b) -> bool { - return (a.fi == b.fi) ? (a.se < b.se) : (a.fi < b.fi); - }); + sort(v.begin(), v.end(), [](const dd &a, const dd &b) -> bool { + return (a.fi == b.fi) ? (a.se < b.se) : (a.fi < b.fi); + }); - for (int i = 0; i < v.sz; ++i) { - while (k >= 2 && cross(v[ans[k - 2]], v[ans[k - 1]], v[i]) < 0) k--; - ans[k++] = i; - } + for (int i = 0; i < v.sz; ++i) { + while (k >= 2 && cross(v[ans[k - 2]], v[ans[k - 1]], v[i]) < 0) k--; + ans[k++] = i; + } - for (int i = v.sz - 2, t = k + 1; i >= 0; --i) { - while (k >= t && cross(v[ans[k - 2]], v[ans[k - 1]], v[i]) < 0) k--; - ans[k++] = i; - } + for (int i = v.sz - 2, t = k + 1; i >= 0; --i) { + while (k >= t && cross(v[ans[k - 2]], v[ans[k - 1]], v[i]) < 0) k--; + ans[k++] = i; + } - ans.resize(k); - sort(rall(ans)); - ans.erase(unique(all(ans)), ans.end()); + ans.resize(k); + sort(rall(ans)); + ans.erase(unique(all(ans)), ans.end()); - for (auto i : ans) - v.erase(v.begin() + i); + for (auto i : ans) + v.erase(v.begin() + i); - return k - 1; + return k - 1; } int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n; - while (cin >> n && n) { - vector<dd> v; - double x, y; - - for (int i = 0; i < n; ++i) { - cin >> x >> y; - v.pb(dd(x, y)); + ios::sync_with_stdio(0); + cin.tie(0); + + int n; + while (cin >> n && n) { + vector<dd> v; + double x, y; + + for (int i = 0; i < n; ++i) { + cin >> x >> y; + v.pb(dd(x, y)); + } + + int ans = 0; + while (v.sz) { + convex_hull(v); + ans++; + } + + if (ans % 2) cout << "Take this onion to the lab!\n"; + else cout << "Do not take this onion to the lab!\n"; } - int ans = 0; - while (v.sz) { - convex_hull(v); - ans++; - } - - if (ans % 2) cout << "Take this onion to the lab!\n"; - else cout << "Do not take this onion to the lab!\n"; - } - - return 0; + return 0; } diff --git a/contests/Cadernaveis/URI1477.cpp b/contests/Cadernaveis/URI1477.cpp index 54df88c..c8816a9 100644 --- a/contests/Cadernaveis/URI1477.cpp +++ b/contests/Cadernaveis/URI1477.cpp @@ -24,27 +24,27 @@ typedef long long ll; typedef pair<int,int> ii; typedef struct elem { - int h, e, r; - - elem() : h(0), e(0), r(0) {} - elem(int h, int e, int r) : h(h), e(e), r(r) {} - - elem operator+(const elem &x) { - return elem(h + x.h, e + x.e, r + x.r); - } - - void change(int n) { - int a = h, b = e, c = r; - if (n % 3 == 1) { - e = a; - r = b; - h = c; - } else if (n % 3 == 2) { - e = c; - r = a; - h = b; + int h, e, r; + + elem() : h(0), e(0), r(0) {} + elem(int h, int e, int r) : h(h), e(e), r(r) {} + + elem operator+(const elem &x) { + return elem(h + x.h, e + x.e, r + x.r); + } + + void change(int n) { + int a = h, b = e, c = r; + if (n % 3 == 1) { + e = a; + r = b; + h = c; + } else if (n % 3 == 2) { + e = c; + r = a; + h = b; + } } - } } elem; @@ -57,97 +57,97 @@ int lazy[MAX * 4]; #define right(x) ((x << 1) + 1) void build(int node = 1, int a = 0, int b = N - 1) { - if (a > b) - return; + if (a > b) + return; - if (a == b) { - tree[node] = v[a]; - return; - } + if (a == b) { + tree[node] = v[a]; + return; + } - build(left(node), a, (a + b) / 2); - build(right(node), (a + b) / 2 + 1, b); - tree[node] = tree[node * 2] + tree[node * 2 + 1]; + build(left(node), a, (a + b) / 2); + build(right(node), (a + b) / 2 + 1, b); + tree[node] = tree[node * 2] + tree[node * 2 + 1]; } void push(int node, int a, int b, int val) { - tree[node].change(val); + tree[node].change(val); - if (a != b) { - lazy[left(node)] += val; - lazy[right(node)] += val; - } + if (a != b) { + lazy[left(node)] += val; + lazy[right(node)] += val; + } - lazy[node] = 0; + lazy[node] = 0; } void update(int i, int j, int node = 1, int a = 0, int b = N - 1) { - if (lazy[node] != 0) - push(node, a, b, lazy[node]); + if (lazy[node] != 0) + push(node, a, b, lazy[node]); - if (a > b or a > j or b < i) - return; + if (a > b or a > j or b < i) + return; - if (a >= i and b <= j) { - push(node, a, b, 1); - return; - } + if (a >= i and b <= j) { + push(node, a, b, 1); + return; + } - update(i, j, left(node), a, (a + b) / 2); - update(i, j, right(node), (a + b) / 2 + 1, b); - tree[node] = tree[node * 2] + tree[node * 2 + 1]; + update(i, j, left(node), a, (a + b) / 2); + update(i, j, right(node), (a + b) / 2 + 1, b); + tree[node] = tree[node * 2] + tree[node * 2 + 1]; } elem query(int i, int j, int node = 1, int a = 0, int b = N - 1) { - if (a > b || a > j || b < i) - return elem(); + if (a > b || a > j || b < i) + return elem(); - if (lazy[node]) - push(node, a, b, lazy[node]); + if (lazy[node]) + push(node, a, b, lazy[node]); - if (a >= i and b <= j) - return tree[node]; + if (a >= i and b <= j) + return tree[node]; - elem q1 = query(i, j, left(node), a, (a + b) / 2); - elem q2 = query(i, j, right(node), (a + b) / 2 + 1, b); - return q1 + q2; + elem q1 = query(i, j, left(node), a, (a + b) / 2); + elem q2 = query(i, j, right(node), (a + b) / 2 + 1, b); + return q1 + q2; } int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int m; - while (cin >> N >> m) { - for (int i = 0; i < MAX * 4; ++i) { - tree[i] = elem(); - lazy[i] = 0; + ios::sync_with_stdio(0); + cin.tie(0); + + int m; + while (cin >> N >> m) { + for (int i = 0; i < MAX * 4; ++i) { + tree[i] = elem(); + lazy[i] = 0; + } + + for (int i = 0; i < N; ++i) { + v[i].h = 1; + v[i].e = v[i].r = 0; + } + + build(); + + for (int i = 0; i < m; ++i) { + char op; + int a, b; cin >> op >> a >> b; + + if (op == 'C') { + elem x = query(a - 1, b - 1); + cout << x.h << " " << x.e << " " << x.r << ende; + } else + update(a - 1, b - 1); + } + + cout << ende; } - for (int i = 0; i < N; ++i) { - v[i].h = 1; - v[i].e = v[i].r = 0; - } - - build(); - - for (int i = 0; i < m; ++i) { - char op; - int a, b; cin >> op >> a >> b; - - if (op == 'C') { - elem x = query(a - 1, b - 1); - cout << x.h << " " << x.e << " " << x.r << ende; - } else - update(a - 1, b - 1); - } - - cout << ende; - } - - return 0; + return 0; } diff --git a/contests/Cadernaveis/URI1850.cpp b/contests/Cadernaveis/URI1850.cpp index 4bb2e73..0368b09 100644 --- a/contests/Cadernaveis/URI1850.cpp +++ b/contests/Cadernaveis/URI1850.cpp @@ -27,57 +27,57 @@ int dy[] = {0, 0, 1, -1}; int cont[110][110][1 << 8]; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - ii arya; - string x; - vector<string> mat; - - for (int i = 0; cin >> x; ++i) { - mat.pb(x); - for (int j = 0; j < x.size(); ++j) - if (x[j] == '@') - arya = {i, j}; - } - - int n = mat.size(), m = mat[0].size(); - - mset(cont, 0); - queue<elem> Q; - Q.push({arya, {0, 0}}); - cont[arya.fi][arya.se][0] = 1; - - while (!Q.empty()) { - elem curr = Q.front(); Q.pop(); - - if (mat[curr.fi.fi][curr.fi.se] == '*') - return cout << curr.se.se << ende, 0; - - for (int i = 0; i < 4; ++i) { - int x = curr.fi.fi + dx[i]; - int y = curr.fi.se + dy[i]; - - if (x >= 0 && x < n && y >= 0 && y < m && - !cont[x][y][curr.se.fi] && mat[x][y] != '#') { - int msk = curr.se.fi; - - if (mat[x][y] >= 'A' && mat[x][y] <= 'G') { - if (msk & (1 << (mat[x][y] - 'A'))) { - cont[x][y][msk] = 1; - Q.push({{x, y}, {msk, curr.se.se + 1}}); - } - } else { - if (mat[x][y] >= 'a' && mat[x][y] <= 'g') - msk |= (1 << (mat[x][y] - 'a')); - - cont[x][y][msk] = 1; - Q.push({{x, y}, {msk, curr.se.se + 1}}); + ios::sync_with_stdio(0); + cin.tie(0); + + ii arya; + string x; + vector<string> mat; + + for (int i = 0; cin >> x; ++i) { + mat.pb(x); + for (int j = 0; j < x.size(); ++j) + if (x[j] == '@') + arya = {i, j}; + } + + int n = mat.size(), m = mat[0].size(); + + mset(cont, 0); + queue<elem> Q; + Q.push({arya, {0, 0}}); + cont[arya.fi][arya.se][0] = 1; + + while (!Q.empty()) { + elem curr = Q.front(); Q.pop(); + + if (mat[curr.fi.fi][curr.fi.se] == '*') + return cout << curr.se.se << ende, 0; + + for (int i = 0; i < 4; ++i) { + int x = curr.fi.fi + dx[i]; + int y = curr.fi.se + dy[i]; + + if (x >= 0 && x < n && y >= 0 && y < m && + !cont[x][y][curr.se.fi] && mat[x][y] != '#') { + int msk = curr.se.fi; + + if (mat[x][y] >= 'A' && mat[x][y] <= 'G') { + if (msk & (1 << (mat[x][y] - 'A'))) { + cont[x][y][msk] = 1; + Q.push({{x, y}, {msk, curr.se.se + 1}}); + } + } else { + if (mat[x][y] >= 'a' && mat[x][y] <= 'g') + msk |= (1 << (mat[x][y] - 'a')); + + cont[x][y][msk] = 1; + Q.push({{x, y}, {msk, curr.se.se + 1}}); + } + } } - } } - } - cout << "--" << ende; - return 0; + cout << "--" << ende; + return 0; } diff --git a/contests/Cadernaveis/URI1852.cpp b/contests/Cadernaveis/URI1852.cpp index 75c35d0..408671a 100644 --- a/contests/Cadernaveis/URI1852.cpp +++ b/contests/Cadernaveis/URI1852.cpp @@ -22,96 +22,96 @@ using ll = long long; using ii = pair<int,int>; vector<int> gale_shapley(const vector<vector<int>> &pref) { - int n = pref[0].size(); - vector<int> w_part(n, -1); - vector<int> m_part(n, -1); - vector<int> start(n, 0); - - while (true) { - int m; - for (m = 0; m < n; ++m) - if (m_part[m] == -1) - break; - - if (m == n) break; - - for (; start[m] < n && m_part[m] == -1; ++start[m]) { - int w = pref[m][start[m]]; - - if (w_part[w - n] == -1) { - w_part[w - n] = m; - m_part[m] = w; - } else { - int m1 = w_part[w - n]; - bool pref_m = false; - - for (int j = 0; j < n; ++j) - if (pref[w][j] == m) { - pref_m = true; - break; - } else if (pref[w][j] == m1) - break; - - if (pref_m) { - w_part[w - n] = m; - m_part[m] = w; - m_part[m1] = -1; + int n = pref[0].size(); + vector<int> w_part(n, -1); + vector<int> m_part(n, -1); + vector<int> start(n, 0); + + while (true) { + int m; + for (m = 0; m < n; ++m) + if (m_part[m] == -1) + break; + + if (m == n) break; + + for (; start[m] < n && m_part[m] == -1; ++start[m]) { + int w = pref[m][start[m]]; + + if (w_part[w - n] == -1) { + w_part[w - n] = m; + m_part[m] = w; + } else { + int m1 = w_part[w - n]; + bool pref_m = false; + + for (int j = 0; j < n; ++j) + if (pref[w][j] == m) { + pref_m = true; + break; + } else if (pref[w][j] == m1) + break; + + if (pref_m) { + w_part[w - n] = m; + m_part[m] = w; + m_part[m1] = -1; + } + } } - } } - } - return m_part; + return m_part; } int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n; cin >> n; - vector<vector<int>> pref(2*n, vector<int>(n)); - - int k1 = 0, k2 = n; - map<string,int> M; - vector<string> names(2*n); - for (int i = 0; i < n; ++i) { - string s; cin >> s; - if (M.find(s) == M.end()) { - names[k1] = s; - M[s] = k1++; - } + ios::sync_with_stdio(0); + cin.tie(0); + + int n; cin >> n; + vector<vector<int>> pref(2*n, vector<int>(n)); + + int k1 = 0, k2 = n; + map<string,int> M; + vector<string> names(2*n); + for (int i = 0; i < n; ++i) { + string s; cin >> s; + if (M.find(s) == M.end()) { + names[k1] = s; + M[s] = k1++; + } - for (int j = 0; j < n; ++j) { - string t; cin >> t; - if (M.find(t) == M.end()) { - names[k2] = t; - M[t] = k2++; - } + for (int j = 0; j < n; ++j) { + string t; cin >> t; + if (M.find(t) == M.end()) { + names[k2] = t; + M[t] = k2++; + } - pref[M[s]][j] = M[t]; + pref[M[s]][j] = M[t]; + } } - } - for (int i = 0; i < n; ++i) { - string s; cin >> s; - if (M.find(s) == M.end()) { - names[k2] = s; - M[s] = k2++; - } + for (int i = 0; i < n; ++i) { + string s; cin >> s; + if (M.find(s) == M.end()) { + names[k2] = s; + M[s] = k2++; + } - for (int j = 0; j < n; ++j) { - string t; cin >> t; - if (M.find(t) == M.end()) { - names[k1] = t; - M[t] = k1++; - } + for (int j = 0; j < n; ++j) { + string t; cin >> t; + if (M.find(t) == M.end()) { + names[k1] = t; + M[t] = k1++; + } - pref[M[s]][j] = M[t]; + pref[M[s]][j] = M[t]; + } } - } - vector<int> ans = gale_shapley(pref); - for (int i = 0; i < n; ++i) - cout << names[i] << " " << names[ans[i]] << ende; - return 0; + vector<int> ans = gale_shapley(pref); + for (int i = 0; i < n; ++i) + cout << names[i] << " " << names[ans[i]] << ende; + return 0; } diff --git a/contests/Cadernaveis/URI1860.cpp b/contests/Cadernaveis/URI1860.cpp index a2ce054..532c161 100644 --- a/contests/Cadernaveis/URI1860.cpp +++ b/contests/Cadernaveis/URI1860.cpp @@ -23,29 +23,29 @@ using ii = pair<int,int>; using dd = pair<double,double>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - cout << setprecision(2) << fixed; + ios::sync_with_stdio(0); + cin.tie(0); + cout << setprecision(2) << fixed; - int n; - double l = 0.0, r; - cin >> n >> r; + int n; + double l = 0.0, r; + cin >> n >> r; - vector<dd> v(n); - for (auto &i : v) cin >> i.fi >> i.se; + vector<dd> v(n); + for (auto &i : v) cin >> i.fi >> i.se; - double grtl, grtr; - for (int i = 0; i < 100; ++i) { - double lt = (r - l) / 3.0 + l; - double rt = ((r - l) * 2.0) / 3.0 + l; + double grtl, grtr; + for (int i = 0; i < 100; ++i) { + double lt = (r - l) / 3.0 + l; + double rt = ((r - l) * 2.0) / 3.0 + l; - grtl = 0.0; for (auto j : v) grtl = max(grtl, hypot(j.fi - lt, j.se)); - grtr = 0.0; for (auto j : v) grtr = max(grtr, hypot(j.fi - rt, j.se)); + grtl = 0.0; for (auto j : v) grtl = max(grtl, hypot(j.fi - lt, j.se)); + grtr = 0.0; for (auto j : v) grtr = max(grtr, hypot(j.fi - rt, j.se)); - if (grtl > grtr) l = lt; - else r = rt; - } + if (grtl > grtr) l = lt; + else r = rt; + } - cout << l << " " << grtl << ende; - return 0; + cout << l << " " << grtl << ende; + return 0; } diff --git a/contests/Cadernaveis/URI1932_ite.cpp b/contests/Cadernaveis/URI1932_ite.cpp index 4658e6e..be270eb 100644 --- a/contests/Cadernaveis/URI1932_ite.cpp +++ b/contests/Cadernaveis/URI1932_ite.cpp @@ -28,18 +28,18 @@ int v[MAX]; int dp[MAX][2]; int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - cin >> n >> c; - for (int i = 0; i < n; ++i) - cin >> v[i]; + cin >> n >> c; + for (int i = 0; i < n; ++i) + cin >> v[i]; - for (int i = n-1; i >= 0; --i) { - dp[i][0] = max(dp[i+1][1] - c - v[i], dp[i+1][0]); - dp[i][1] = max(dp[i+1][0] + v[i], dp[i+1][1]); - } + for (int i = n-1; i >= 0; --i) { + dp[i][0] = max(dp[i+1][1] - c - v[i], dp[i+1][0]); + dp[i][1] = max(dp[i+1][0] + v[i], dp[i+1][1]); + } - cout << dp[0][0] << ende; - return 0; + cout << dp[0][0] << ende; + return 0; } diff --git a/contests/Cadernaveis/URI1932_rec.cpp b/contests/Cadernaveis/URI1932_rec.cpp index ab2e5b0..de7652b 100644 --- a/contests/Cadernaveis/URI1932_rec.cpp +++ b/contests/Cadernaveis/URI1932_rec.cpp @@ -28,31 +28,31 @@ int v[MAX]; int dp[MAX][2]; int solve(int i, bool hold) { - if (i == n) - return 0; - - if (dp[i][hold] != inf) - return dp[i][hold]; - - if (!hold) - return dp[i][hold] = max(solve(i + 1, true) - c - v[i], - solve(i + 1, false)); - else - return dp[i][hold] = max(solve(i + 1, false) + v[i], - solve(i + 1, true)); + if (i == n) + return 0; + + if (dp[i][hold] != inf) + return dp[i][hold]; + + if (!hold) + return dp[i][hold] = max(solve(i + 1, true) - c - v[i], + solve(i + 1, false)); + else + return dp[i][hold] = max(solve(i + 1, false) + v[i], + solve(i + 1, true)); } int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - mset(dp, 0x3f); + mset(dp, 0x3f); - cin >> n >> c; - for (int i = 0; i < n; ++i) - cin >> v[i]; + cin >> n >> c; + for (int i = 0; i < n; ++i) + cin >> v[i]; - cout << solve(0, false) << ende; - return 0; + cout << solve(0, false) << ende; + return 0; } diff --git a/contests/Cadernaveis/URI2305.cpp b/contests/Cadernaveis/URI2305.cpp index b40735d..cf92fd5 100644 --- a/contests/Cadernaveis/URI2305.cpp +++ b/contests/Cadernaveis/URI2305.cpp @@ -22,28 +22,28 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int l, c, m, n; cin >> l >> c >> m >> n; - vector<vector<int>> mat(l, vector<int>(c)); - for (auto &i : mat) for (auto &j : i) cin >> j; - - vector<vector<int>> sum(l+1, vector<int>(c+1, 0)); - for (int i = 1; i <= l; ++i) - for (int j = 1; j <= c; ++j) - if (j == 1) sum[i][j] = mat[i-1][j-1]; - else sum[i][j] = sum[i][j-1] + mat[i-1][j-1]; - - for (int i = 2; i <= l; ++i) - for (int j = 1; j <= c; ++j) - sum[i][j] += sum[i-1][j]; - - int ans = 0; - for (int i = m; i <= l; ++i) - for (int j = n; j <= c; ++j) - ans = max(ans, sum[i][j] - sum[i-m][j] - sum[i][j-n] + sum[i-m][j-n]); - - cout << ans << ende; - return 0; + ios::sync_with_stdio(0); + cin.tie(0); + + int l, c, m, n; cin >> l >> c >> m >> n; + vector<vector<int>> mat(l, vector<int>(c)); + for (auto &i : mat) for (auto &j : i) cin >> j; + + vector<vector<int>> sum(l+1, vector<int>(c+1, 0)); + for (int i = 1; i <= l; ++i) + for (int j = 1; j <= c; ++j) + if (j == 1) sum[i][j] = mat[i-1][j-1]; + else sum[i][j] = sum[i][j-1] + mat[i-1][j-1]; + + for (int i = 2; i <= l; ++i) + for (int j = 1; j <= c; ++j) + sum[i][j] += sum[i-1][j]; + + int ans = 0; + for (int i = m; i <= l; ++i) + for (int j = n; j <= c; ++j) + ans = max(ans, sum[i][j] - sum[i-m][j] - sum[i][j-n] + sum[i-m][j-n]); + + cout << ans << ende; + return 0; } diff --git a/contests/Cadernaveis/UVA10594.cpp b/contests/Cadernaveis/UVA10594.cpp index 265e484..2892f27 100644 --- a/contests/Cadernaveis/UVA10594.cpp +++ b/contests/Cadernaveis/UVA10594.cpp @@ -24,103 +24,103 @@ using ll = long long; using ii = pair<int,int>; struct MinCostMaxFlow { - struct Edge { - int u, v, cap, cost; - }; - - int N; - vector<Edge> edges; - vector<vector<int>> adj; - vector<int> vis, dist, par, ind; - - MinCostMaxFlow(int N) : - N(N), vis(N), dist(N), par(N), ind(N), adj(N) {} - - void add_edge(int u, int v, int cap, int cost) { - adj[u].pb(edges.size()); - edges.pb({ u, v, cap, cost }); - - adj[v].pb(edges.size()); - edges.pb({ v, u, 0, -cost }); - } - - bool spfa(int s, int t) { - fill(all(dist), inf); - dist[s] = 0; - - queue<int> Q; - Q.push(s); - - while (!Q.empty()) { - int u = Q.front(); Q.pop(); - vis[u] = 0; - - for (auto i : adj[u]) { - Edge &e = edges[i]; - int v = e.v; - - if (e.cap > 0 && dist[v] > dist[u] + e.cost) { - dist[v] = dist[u] + e.cost; - par[v] = u; - ind[v] = i; - - if (!vis[v]) { - Q.push(v); - vis[v] = 1; - } - } - } + struct Edge { + int u, v, cap, cost; + }; + + int N; + vector<Edge> edges; + vector<vector<int>> adj; + vector<int> vis, dist, par, ind; + + MinCostMaxFlow(int N) : + N(N), vis(N), dist(N), par(N), ind(N), adj(N) {} + + void add_edge(int u, int v, int cap, int cost) { + adj[u].pb(edges.size()); + edges.pb({ u, v, cap, cost }); + + adj[v].pb(edges.size()); + edges.pb({ v, u, 0, -cost }); } - return dist[t] < inf; - } - - pair<ll,int> run(int s, int t) { - ll mincost = 0; - int maxflow = 0; - - while (spfa(s, t)) { - ll flow = inf; - for (int i = t; i != s; i = par[i]) - flow = min(flow, (ll) edges[ind[i]].cap); - - for (int i = t; i != s; i = par[i]) { - edges[ind[i] ].cap -= flow; - edges[ind[i]^1].cap += flow; - } - - mincost += flow * dist[t]; - maxflow += flow; + bool spfa(int s, int t) { + fill(all(dist), inf); + dist[s] = 0; + + queue<int> Q; + Q.push(s); + + while (!Q.empty()) { + int u = Q.front(); Q.pop(); + vis[u] = 0; + + for (auto i : adj[u]) { + Edge &e = edges[i]; + int v = e.v; + + if (e.cap > 0 && dist[v] > dist[u] + e.cost) { + dist[v] = dist[u] + e.cost; + par[v] = u; + ind[v] = i; + + if (!vis[v]) { + Q.push(v); + vis[v] = 1; + } + } + } + } + + return dist[t] < inf; } - return make_pair(mincost, maxflow); - } + pair<ll,int> run(int s, int t) { + ll mincost = 0; + int maxflow = 0; + + while (spfa(s, t)) { + ll flow = inf; + for (int i = t; i != s; i = par[i]) + flow = min(flow, (ll) edges[ind[i]].cap); + + for (int i = t; i != s; i = par[i]) { + edges[ind[i] ].cap -= flow; + edges[ind[i]^1].cap += flow; + } + + mincost += flow * dist[t]; + maxflow += flow; + } + + return make_pair(mincost, maxflow); + } }; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n, m; - while (cin >> n >> m) { - MinCostMaxFlow mcmf(110); - - vector<pair<ii,int>> aux(m); - for (int i = 0; i < m; ++i) - cin >> aux[i].fi.fi >> aux[i].fi.se >> aux[i].se; - - int d, k; cin >> d >> k; - mcmf.add_edge(0, 1, d, 0); - for (int i = 0; i < m; ++i) { - mcmf.add_edge(aux[i].fi.fi, aux[i].fi.se, k, aux[i].se); - mcmf.add_edge(aux[i].fi.se, aux[i].fi.fi, k, aux[i].se); - } + ios::sync_with_stdio(0); + cin.tie(0); + + int n, m; + while (cin >> n >> m) { + MinCostMaxFlow mcmf(110); + + vector<pair<ii,int>> aux(m); + for (int i = 0; i < m; ++i) + cin >> aux[i].fi.fi >> aux[i].fi.se >> aux[i].se; + + int d, k; cin >> d >> k; + mcmf.add_edge(0, 1, d, 0); + for (int i = 0; i < m; ++i) { + mcmf.add_edge(aux[i].fi.fi, aux[i].fi.se, k, aux[i].se); + mcmf.add_edge(aux[i].fi.se, aux[i].fi.fi, k, aux[i].se); + } - pair<ll,int> ans = mcmf.run(0, n); + pair<ll,int> ans = mcmf.run(0, n); - if (ans.se != d) cout << "Impossible." << ende; - else cout << ans.fi << ende; - } + if (ans.se != d) cout << "Impossible." << ende; + else cout << ans.fi << ende; + } - return 0; + return 0; } diff --git a/contests/Cadernaveis/UVA10679_aho.cpp b/contests/Cadernaveis/UVA10679_aho.cpp index 1576039..badc96a 100644 --- a/contests/Cadernaveis/UVA10679_aho.cpp +++ b/contests/Cadernaveis/UVA10679_aho.cpp @@ -1,131 +1,131 @@ /// I Love Strings! (Aho-Corasick) #include <bits/stdc++.h> - + #define MAX 1010101 #define EPS 1e-6 #define MOD 1000000007 #define inf 0x3f3f3f3f #define llinf 0x3f3f3f3f3f3f3f3f - + #define fi first #define se second #define pb push_back #define ende '\n' - + #define all(x) (x).begin(), (x).end() #define rall(x) (x).rbegin(), (x).rend() #define mset(x, y) memset(&x, (y), sizeof(x)) - + using namespace std; - + using ll = long long; using ii = pair<int,int>; - + struct AhoCorasick { - struct Node { - int fail, occ, cnt; - vector<int> words; - map<char,int> next; - - Node() : fail(0), occ(-1), cnt(0) {} - int has(char i) { return next.count(i); } - int &operator[](char i) { return next[i]; } - }; - - vector<int> top; - vector<Node> trie; - - AhoCorasick(const vector<string> &v) { - trie.pb(Node()); - build(v); - top = preprocess(); - } - - int insert(const string &s) { - int n = 0; - for (int i = 0; i < s.size(); n = trie[n][s[i]], ++i) - if (!trie[n].has(s[i])) { - trie[n][s[i]] = trie.size(); + struct Node { + int fail, occ, cnt; + vector<int> words; + map<char,int> next; + + Node() : fail(0), occ(-1), cnt(0) {} + int has(char i) { return next.count(i); } + int &operator[](char i) { return next[i]; } + }; + + vector<int> top; + vector<Node> trie; + + AhoCorasick(const vector<string> &v) { trie.pb(Node()); - } - return n; - } - - void build(const vector<string> &v) { - for (int i = 0; i < v.size(); ++i) { - int n = insert(v[i]); - trie[n].words.pb(i); + build(v); + top = preprocess(); + } + + int insert(const string &s) { + int n = 0; + for (int i = 0; i < s.size(); n = trie[n][s[i]], ++i) + if (!trie[n].has(s[i])) { + trie[n][s[i]] = trie.size(); + trie.pb(Node()); + } + return n; } - } - - inline int suffix(int v, char c) { - while (v != 0 && !trie[v].has(c)) v = trie[v].fail; - if (trie[v].has(c)) v = trie[v][c]; - return v; - } - - vector<int> preprocess() { - vector<int> Q = { 0 }; - for (int i = 0; i != Q.size(); ++i) { - int u = Q[i]; - for (auto j : trie[u].next) { - int &v = trie[j.se].fail; - if (u) { - v = suffix(trie[u].fail, j.fi); - trie[j.se].occ = trie[v].words.size() ? v : trie[v].occ; - } else { - v = trie[u].fail; - trie[j.se].occ = -1; + + void build(const vector<string> &v) { + for (int i = 0; i < v.size(); ++i) { + int n = insert(v[i]); + trie[n].words.pb(i); } - Q.pb(j.se); - } } - return Q; - } - - vector<int> match(const string &p) { - int u = 0; - vector<int> ans; - for (auto &i : p) { - u = suffix(u, i); - trie[u].cnt++; + + inline int suffix(int v, char c) { + while (v != 0 && !trie[v].has(c)) v = trie[v].fail; + if (trie[v].has(c)) v = trie[v][c]; + return v; } - for (int i = top.size() - 1; i >= 0; --i) - trie[trie[top[i]].fail].cnt += trie[top[i]].cnt; + vector<int> preprocess() { + vector<int> Q = { 0 }; + for (int i = 0; i != Q.size(); ++i) { + int u = Q[i]; + for (auto j : trie[u].next) { + int &v = trie[j.se].fail; + if (u) { + v = suffix(trie[u].fail, j.fi); + trie[j.se].occ = trie[v].words.size() ? v : trie[v].occ; + } else { + v = trie[u].fail; + trie[j.se].occ = -1; + } + Q.pb(j.se); + } + } + return Q; + } + + vector<int> match(const string &p) { + int u = 0; + vector<int> ans; + for (auto &i : p) { + u = suffix(u, i); + trie[u].cnt++; + } + + for (int i = top.size() - 1; i >= 0; --i) + trie[trie[top[i]].fail].cnt += trie[top[i]].cnt; - for (auto i : trie) - if (i.cnt && i.words.size()) - for (auto j : i.words) ans.pb(j); + for (auto i : trie) + if (i.cnt && i.words.size()) + for (auto j : i.words) ans.pb(j); - sort(all(ans)); - ans.erase(unique(all(ans)), ans.end()); - return ans; - } + sort(all(ans)); + ans.erase(unique(all(ans)), ans.end()); + return ans; + } }; - + int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int t; cin >> t; - while (t--) { - string s; cin >> s; - int n; cin >> n; - vector<string> v(n); - for (auto &i : v) cin >> i; - - AhoCorasick aho(v); - vector<int> ans = aho.match(s); - - for (int i = 0, j = 0; i < n; ++i) { - if (j < ans.size() && ans[j] == i) { - cout << 'y' << ende; ++j; - } else - cout << 'n' << ende; + ios::sync_with_stdio(0); + cin.tie(0); + + int t; cin >> t; + while (t--) { + string s; cin >> s; + int n; cin >> n; + vector<string> v(n); + for (auto &i : v) cin >> i; + + AhoCorasick aho(v); + vector<int> ans = aho.match(s); + + for (int i = 0, j = 0; i < n; ++i) { + if (j < ans.size() && ans[j] == i) { + cout << 'y' << ende; ++j; + } else + cout << 'n' << ende; + } } - } - - return 0; + + return 0; } diff --git a/contests/Cadernaveis/UVA10679_kmp.cpp b/contests/Cadernaveis/UVA10679_kmp.cpp index 5026bcc..b14e498 100644 --- a/contests/Cadernaveis/UVA10679_kmp.cpp +++ b/contests/Cadernaveis/UVA10679_kmp.cpp @@ -22,55 +22,55 @@ using ll = long long; using ii = pair<int,int>; struct KMP { - string patt; - vector<int> table; + string patt; + vector<int> table; - KMP(string patt) : - patt(patt), table(patt.size()+1) - { preprocess(); } + KMP(string patt) : + patt(patt), table(patt.size()+1) + { preprocess(); } - void preprocess() { - fill(all(table), -1); + void preprocess() { + fill(all(table), -1); - for (int i = 0, j = -1; i < patt.size(); ++i) { - while (j >= 0 && patt[i] != patt[j]) - j = table[j]; - table[i + 1] = ++j; + for (int i = 0, j = -1; i < patt.size(); ++i) { + while (j >= 0 && patt[i] != patt[j]) + j = table[j]; + table[i + 1] = ++j; + } } - } - bool search(const string &txt) { - bool found = false; + bool search(const string &txt) { + bool found = false; - for (int i = 0, j = 0; i < txt.size(); ++i) { - while (j >= 0 && txt[i] != patt[j]) - j = table[j]; - j++; + for (int i = 0, j = 0; i < txt.size(); ++i) { + while (j >= 0 && txt[i] != patt[j]) + j = table[j]; + j++; - if (j == patt.size()) { - found = true; - j = table[j]; - } - } + if (j == patt.size()) { + found = true; + j = table[j]; + } + } - return found; - } + return found; + } }; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int t; cin >> t; - for (int cas = 1; cas <= t; ++cas) { - string s; cin >> s; - int q; cin >> q; - for (int i = 0; i < q; ++i) { - string t; cin >> t; - KMP kmp(t); - cout << ((kmp.search(s)) ? "y" : "n") << ende; + ios::sync_with_stdio(0); + cin.tie(0); + + int t; cin >> t; + for (int cas = 1; cas <= t; ++cas) { + string s; cin >> s; + int q; cin >> q; + for (int i = 0; i < q; ++i) { + string t; cin >> t; + KMP kmp(t); + cout << ((kmp.search(s)) ? "y" : "n") << ende; + } } - } - return 0; + return 0; } diff --git a/contests/Cadernaveis/qTREE.cpp b/contests/Cadernaveis/qTREE.cpp index 9a42fd8..681c11f 100644 --- a/contests/Cadernaveis/qTREE.cpp +++ b/contests/Cadernaveis/qTREE.cpp @@ -1,203 +1,203 @@ /// Query on a tree #include <bits/stdc++.h> - + #define MAX 10101 #define EPS 1e-6 #define MOD 1000000007 #define inf 0x3f3f3f3f #define llinf 0x3f3f3f3f3f3f3f3f - + #define fi first #define se second #define pb push_back #define ende '\n' - + #define all(x) (x).begin(), (x).end() #define rall(x) (x).rbegin(), (x).rend() #define mset(x, y) memset(&x, (y), sizeof(x)) - + using namespace std; - + using ll = long long; using ii = pair<int,int>; - + #define left(x) (x << 1) #define right(x) ((x << 1) + 1) - + int N; - + template <typename T> struct SegmentTree { - using func = function<T(T,T)>; - - func op; - T ident = T(); - vector<T> tree; - - SegmentTree(func op) : - op(op), tree(MAX*4) {} - - void build(const vector<T> &v, - int node = 1, int l = 0, int r = N - 1) - { - if (l > r) - return; - - if (l == r) - tree[node] = v[l]; - else { - int m = (l + r) / 2; - build(v, left(node), l, m); - build(v, right(node), m + 1, r); - tree[node] = op(tree[left(node)], tree[right(node)]); + using func = function<T(T,T)>; + + func op; + T ident = T(); + vector<T> tree; + + SegmentTree(func op) : + op(op), tree(MAX*4) {} + + void build(const vector<T> &v, + int node = 1, int l = 0, int r = N - 1) + { + if (l > r) + return; + + if (l == r) + tree[node] = v[l]; + else { + int m = (l + r) / 2; + build(v, left(node), l, m); + build(v, right(node), m + 1, r); + tree[node] = op(tree[left(node)], tree[right(node)]); + } } - } - - void update(int i, T val, - int node = 1, int l = 0, int r = N - 1) - { - if (l > r || l > i || r < i) - return; - - if (l == r) - tree[node] = val; - else { - int m = (l + r) / 2; - update(i, val, left(node), l, m); - update(i, val, right(node), m + 1, r); - tree[node] = op(tree[left(node)], tree[right(node)]); + + void update(int i, T val, + int node = 1, int l = 0, int r = N - 1) + { + if (l > r || l > i || r < i) + return; + + if (l == r) + tree[node] = val; + else { + int m = (l + r) / 2; + update(i, val, left(node), l, m); + update(i, val, right(node), m + 1, r); + tree[node] = op(tree[left(node)], tree[right(node)]); + } + } + + T query(int i, int j, + int node = 1, int l = 0, int r = N - 1) + { + if (l > r || l > j || r < i) + return ident; + + if (l >= i && r <= j) + return tree[node]; + + int m = (l + r) / 2; + T q1 = query(i, j, left(node), l, m); + T q2 = query(i, j, right(node), m + 1, r); + return op(q1, q2); } - } - - T query(int i, int j, - int node = 1, int l = 0, int r = N - 1) - { - if (l > r || l > j || r < i) - return ident; - - if (l >= i && r <= j) - return tree[node]; - - int m = (l + r) / 2; - T q1 = query(i, j, left(node), l, m); - T q2 = query(i, j, right(node), m + 1, r); - return op(q1, q2); - } }; - + ii edge[MAX]; vector<ii> graph[MAX]; - + template <typename ST> struct HLD { - ST &seg; - int cnum, ptr; - - vector<int> dep, par, val; - vector<int> head, heavy, pos, bot; - - HLD(int n, ST &seg) : - seg(seg), - dep(n, 0), par(n), val(n), - head(n), heavy(n, -1), pos(n), bot(n) - { - cnum = ptr = 0; - - N = n; - dfs(0); - decompose(0); - - for (int i = 0; i < n - 1; ++i) - if (dep[edge[i].fi] > dep[edge[i].se]) - bot[i] = edge[i].fi; - else - bot[i] = edge[i].se; - } - - int dfs(int x, int p = -1) { - int size = 1; - par[x] = p; - - int max_size = 0; - for (auto i : graph[x]) - if (i.fi != p) { - dep[i.fi] = dep[x] + 1; - val[i.fi] = i.se; - int isize = dfs(i.fi, x); - - size += isize; - if (isize > max_size) - max_size = isize, heavy[x] = i.fi; - } - - return size; - } - - void decompose(int x, int h = 0) { - head[x] = h; - seg.update(ptr, val[x]); - pos[x] = ptr++; - - if (heavy[x] != -1) - decompose(heavy[x], h); - - for (auto i : graph[x]) - if (i.fi != par[x] && i.fi != heavy[x]) - decompose(i.fi, i.fi); - } - - int query(int a, int b) { - int ans = seg.ident; - for (; head[a] != head[b]; b = par[head[b]]) { - if (dep[head[a]] > dep[head[b]]) - swap(a, b); - ans = seg.op(ans, seg.query(pos[head[b]], pos[b])); + ST &seg; + int cnum, ptr; + + vector<int> dep, par, val; + vector<int> head, heavy, pos, bot; + + HLD(int n, ST &seg) : + seg(seg), + dep(n, 0), par(n), val(n), + head(n), heavy(n, -1), pos(n), bot(n) + { + cnum = ptr = 0; + + N = n; + dfs(0); + decompose(0); + + for (int i = 0; i < n - 1; ++i) + if (dep[edge[i].fi] > dep[edge[i].se]) + bot[i] = edge[i].fi; + else + bot[i] = edge[i].se; + } + + int dfs(int x, int p = -1) { + int size = 1; + par[x] = p; + + int max_size = 0; + for (auto i : graph[x]) + if (i.fi != p) { + dep[i.fi] = dep[x] + 1; + val[i.fi] = i.se; + int isize = dfs(i.fi, x); + + size += isize; + if (isize > max_size) + max_size = isize, heavy[x] = i.fi; + } + + return size; + } + + void decompose(int x, int h = 0) { + head[x] = h; + seg.update(ptr, val[x]); + pos[x] = ptr++; + + if (heavy[x] != -1) + decompose(heavy[x], h); + + for (auto i : graph[x]) + if (i.fi != par[x] && i.fi != heavy[x]) + decompose(i.fi, i.fi); + } + + int query(int a, int b) { + int ans = seg.ident; + for (; head[a] != head[b]; b = par[head[b]]) { + if (dep[head[a]] > dep[head[b]]) + swap(a, b); + ans = seg.op(ans, seg.query(pos[head[b]], pos[b])); + } + + if (dep[a] > dep[b]) + swap(a, b); + + return seg.op(ans, seg.query(pos[a] + 1, pos[b])); + } + + void update(int i, int val) { + seg.update(pos[bot[i]], val); } - - if (dep[a] > dep[b]) - swap(a, b); - - return seg.op(ans, seg.query(pos[a] + 1, pos[b])); - } - - void update(int i, int val) { - seg.update(pos[bot[i]], val); - } }; - + int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int t; cin >> t; - while (t--) { - int n; cin >> n; - for (int i = 0; i < n; ++i) - graph[i].clear(); - - for (int i = 0; i < n - 1; ++i) { - int a, b, c; cin >> a >> b >> c; - a--, b--; - graph[a].pb(ii(b, c)); - graph[b].pb(ii(a, c)); - edge[i] = ii(a, b); - } - - SegmentTree<int> seg([](int a, int b) { return max(a, b); }); - HLD<SegmentTree<int>> hld(n, seg); - - string op; - while (cin >> op && op != "DONE") { - if (op == "QUERY") { - int a, b; cin >> a >> b; a--, b--; - cout << hld.query(a, b) << ende; - } else { - int idx, w; cin >> idx >> w; idx--; - hld.update(idx, w); - } + ios::sync_with_stdio(0); + cin.tie(0); + + int t; cin >> t; + while (t--) { + int n; cin >> n; + for (int i = 0; i < n; ++i) + graph[i].clear(); + + for (int i = 0; i < n - 1; ++i) { + int a, b, c; cin >> a >> b >> c; + a--, b--; + graph[a].pb(ii(b, c)); + graph[b].pb(ii(a, c)); + edge[i] = ii(a, b); + } + + SegmentTree<int> seg([](int a, int b) { return max(a, b); }); + HLD<SegmentTree<int>> hld(n, seg); + + string op; + while (cin >> op && op != "DONE") { + if (op == "QUERY") { + int a, b; cin >> a >> b; a--, b--; + cout << hld.query(a, b) << ende; + } else { + int idx, w; cin >> idx >> w; idx--; + hld.update(idx, w); + } + } } - } - - return 0; + + return 0; } diff --git a/contests/ICPC_LA14/A.cpp b/contests/ICPC_LA14/A.cpp index 0a3af82..7747832 100644 --- a/contests/ICPC_LA14/A.cpp +++ b/contests/ICPC_LA14/A.cpp @@ -20,18 +20,18 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - bool poss = true; - vector<int> v(5); - for (auto &i : v) cin >> i; - for (auto &i : v) { - int x; cin >> x; - if (x + i != 1) - poss = false; - } - - cout << (poss ? "Y" : "N") << ende; - return 0; + ios::sync_with_stdio(0); + cin.tie(0); + + bool poss = true; + vector<int> v(5); + for (auto &i : v) cin >> i; + for (auto &i : v) { + int x; cin >> x; + if (x + i != 1) + poss = false; + } + + cout << (poss ? "Y" : "N") << ende; + return 0; } diff --git a/contests/ICPC_LA14/B.cpp b/contests/ICPC_LA14/B.cpp index 106696f..a9088bf 100644 --- a/contests/ICPC_LA14/B.cpp +++ b/contests/ICPC_LA14/B.cpp @@ -20,28 +20,28 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - ll a, b; cin >> a >> b; - string s; cin >> s; - int n = s.size(); - - int fst = n - 1; - auto update = [&]() { - while (fst >= 0 && s[fst] == 'W') fst--; - }; - - update(); - ll ans = 0; - for (int i = 0; i < n; ++i) { - if (s[i] == 'W' && i < fst) { - ans += min((fst - i) * (a - b), a); - swap(s[fst], s[i]); - update(); + ios::sync_with_stdio(0); + cin.tie(0); + + ll a, b; cin >> a >> b; + string s; cin >> s; + int n = s.size(); + + int fst = n - 1; + auto update = [&]() { + while (fst >= 0 && s[fst] == 'W') fst--; + }; + + update(); + ll ans = 0; + for (int i = 0; i < n; ++i) { + if (s[i] == 'W' && i < fst) { + ans += min((fst - i) * (a - b), a); + swap(s[fst], s[i]); + update(); + } } - } - cout << ans << ende; - return 0; + cout << ans << ende; + return 0; } diff --git a/contests/ICPC_LA14/C.cpp b/contests/ICPC_LA14/C.cpp index 2f74bb0..e081b70 100644 --- a/contests/ICPC_LA14/C.cpp +++ b/contests/ICPC_LA14/C.cpp @@ -20,53 +20,53 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - string s; cin >> s; - int n = s.size(); - bool ne = true; - vector<string> v; - for (int i = 0; i < n; ++i) - if (s[i] >= '0' && s[i] <= '9') { - if (ne) { - v.pb(""); - ne = false; - } - v.back().pb(s[i]); - } else - ne = true; + string s; cin >> s; + int n = s.size(); + bool ne = true; + vector<string> v; + for (int i = 0; i < n; ++i) + if (s[i] >= '0' && s[i] <= '9') { + if (ne) { + v.pb(""); + ne = false; + } + v.back().pb(s[i]); + } else + ne = true; - ll ans = 0; - vector<int> md(3, 0); - for (const auto &i : v) { - int sum = 0; - for (int j = 0; j < i.size(); ++j) { - sum += i[j] - '0'; - md[sum % 3]++; - } + ll ans = 0; + vector<int> md(3, 0); + for (const auto &i : v) { + int sum = 0; + for (int j = 0; j < i.size(); ++j) { + sum += i[j] - '0'; + md[sum % 3]++; + } - for (int j = 0; j < i.size(); ++j) { - ans += md[0]; - if ((i[j] - '0') % 3 == 2) { - md[2]--; - int aux = md[0]; - md[0] = md[2]; - md[2] = md[1]; - md[1] = aux; - } else if ((i[j] - '0') % 3 == 1) { - md[1]--; - int aux = md[1]; - md[1] = md[2]; - md[2] = md[0]; - md[0] = aux; - } else { - md[0]--; - } + for (int j = 0; j < i.size(); ++j) { + ans += md[0]; + if ((i[j] - '0') % 3 == 2) { + md[2]--; + int aux = md[0]; + md[0] = md[2]; + md[2] = md[1]; + md[1] = aux; + } else if ((i[j] - '0') % 3 == 1) { + md[1]--; + int aux = md[1]; + md[1] = md[2]; + md[2] = md[0]; + md[0] = aux; + } else { + md[0]--; + } + } } - } - cout << ans << ende; - return 0; + cout << ans << ende; + return 0; } diff --git a/contests/ICPC_LA14/H.cpp b/contests/ICPC_LA14/H.cpp index 2ec7beb..5f89440 100644 --- a/contests/ICPC_LA14/H.cpp +++ b/contests/ICPC_LA14/H.cpp @@ -20,20 +20,20 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n; cin >> n; - vector<int> v(n); - for (auto &i : v) cin >> i; - sort(all(v)); - - int sum1 = 0, sum2 = 0; - for (int i = 0; i < n; i+=2) - sum1 += min(abs(v[i] - v[(i+1)%n]), 24 - abs(v[i] - v[(i+1)%n])); - for (int i = 0; i < n - 1; i+=2) - sum2 += min(abs(v[i] - v[(i-1+n)%n]), 24 - abs(v[i] - v[(i-1+n)%n])); - - cout << min(sum1, sum2) << ende; - return 0; + ios::sync_with_stdio(0); + cin.tie(0); + + int n; cin >> n; + vector<int> v(n); + for (auto &i : v) cin >> i; + sort(all(v)); + + int sum1 = 0, sum2 = 0; + for (int i = 0; i < n; i+=2) + sum1 += min(abs(v[i] - v[(i+1)%n]), 24 - abs(v[i] - v[(i+1)%n])); + for (int i = 0; i < n - 1; i+=2) + sum2 += min(abs(v[i] - v[(i-1+n)%n]), 24 - abs(v[i] - v[(i-1+n)%n])); + + cout << min(sum1, sum2) << ende; + return 0; } diff --git a/contests/ICPC_LA14/I.cpp b/contests/ICPC_LA14/I.cpp index fd8cd6a..ece7d03 100644 --- a/contests/ICPC_LA14/I.cpp +++ b/contests/ICPC_LA14/I.cpp @@ -25,44 +25,44 @@ int tem[MAX]; vector<ii> graph[MAX]; void pre(int x, int p = -1) { - tem[x] = fri[x]; - for (auto i : graph[x]) - if (i.fi != p) { - pre(i.fi, x); - tem[x] += tem[i.fi]; - } + tem[x] = fri[x]; + for (auto i : graph[x]) + if (i.fi != p) { + pre(i.fi, x); + tem[x] += tem[i.fi]; + } } ii solve(int x, int p = -1) { - ii ans{0, 0}; - for (auto i : graph[x]) - if (i.fi != p && tem[i.fi]) { - ii a = solve(i.fi, x); - ans.fi = max(ans.fi, a.fi + i.se); - ans.se += a.se + i.se; - } + ii ans{0, 0}; + for (auto i : graph[x]) + if (i.fi != p && tem[i.fi]) { + ii a = solve(i.fi, x); + ans.fi = max(ans.fi, a.fi + i.se); + ans.se += a.se + i.se; + } - return ans; + return ans; } int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - int n, f; cin >> n >> f; - for (int i = 0; i < n - 1; ++i) { - int a, b, c; cin >> a >> b >> c; a--, b--; - graph[a].pb(ii(b, c)); - graph[b].pb(ii(a, c)); - } + int n, f; cin >> n >> f; + for (int i = 0; i < n - 1; ++i) { + int a, b, c; cin >> a >> b >> c; a--, b--; + graph[a].pb(ii(b, c)); + graph[b].pb(ii(a, c)); + } - for (int i = 0; i < f; ++i) { - int x; cin >> x; x--; - fri[x] = 1; - } + for (int i = 0; i < f; ++i) { + int x; cin >> x; x--; + fri[x] = 1; + } - pre(0); - ii ans = solve(0); - cout << ans.se - ans.fi << ende; - return 0; + pre(0); + ii ans = solve(0); + cout << ans.se - ans.fi << ende; + return 0; } diff --git a/contests/ICPC_LA16/A.cpp b/contests/ICPC_LA16/A.cpp index 4306075..218e45d 100644 --- a/contests/ICPC_LA16/A.cpp +++ b/contests/ICPC_LA16/A.cpp @@ -22,13 +22,13 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - vector<int> v(4); - for (auto &i : v) cin >> i; - sort(all(v)); + vector<int> v(4); + for (auto &i : v) cin >> i; + sort(all(v)); - cout << abs((v[0] + v[3]) - (v[1] + v[2])) << ende; - return 0; + cout << abs((v[0] + v[3]) - (v[1] + v[2])) << ende; + return 0; } diff --git a/contests/ICPC_LA16/B.cpp b/contests/ICPC_LA16/B.cpp index d625d43..1e76ab2 100644 --- a/contests/ICPC_LA16/B.cpp +++ b/contests/ICPC_LA16/B.cpp @@ -25,50 +25,50 @@ using ii = pair<int,int>; set<int> graph[MAX]; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n, m, a, b; cin >> n >> m >> a >> b; - for (int i = 0; i < m; ++i) { - int x, y; cin >> x >> y; - graph[x].insert(y); - graph[y].insert(x); - } - - set<ii> S; - for (int i = 1; i <= n; ++i) - S.insert(ii(graph[i].size(), i)); - - bool ended = false; - while (!ended) { - ended = true; - while (S.size() && S.begin()->fi < a) { - ii u = *(S.begin()); S.erase(S.begin()); - - for (auto i : graph[u.se]) { - S.erase(ii(graph[i].size(), i)); - graph[i].erase(u.se); - S.insert(ii(graph[i].size(), i)); - } - - graph[u.se].clear(); - ended = false; + ios::sync_with_stdio(0); + cin.tie(0); + + int n, m, a, b; cin >> n >> m >> a >> b; + for (int i = 0; i < m; ++i) { + int x, y; cin >> x >> y; + graph[x].insert(y); + graph[y].insert(x); } - while (S.size() && S.size() - prev(S.end())->fi - 1 < b) { - ii u = *(prev(S.end())); S.erase(prev(S.end())); - - for (auto i : graph[u.se]) { - S.erase(ii(graph[i].size(), i)); - graph[i].erase(u.se); + set<ii> S; + for (int i = 1; i <= n; ++i) S.insert(ii(graph[i].size(), i)); - } - graph[u.se].clear(); - ended = false; + bool ended = false; + while (!ended) { + ended = true; + while (S.size() && S.begin()->fi < a) { + ii u = *(S.begin()); S.erase(S.begin()); + + for (auto i : graph[u.se]) { + S.erase(ii(graph[i].size(), i)); + graph[i].erase(u.se); + S.insert(ii(graph[i].size(), i)); + } + + graph[u.se].clear(); + ended = false; + } + + while (S.size() && S.size() - prev(S.end())->fi - 1 < b) { + ii u = *(prev(S.end())); S.erase(prev(S.end())); + + for (auto i : graph[u.se]) { + S.erase(ii(graph[i].size(), i)); + graph[i].erase(u.se); + S.insert(ii(graph[i].size(), i)); + } + + graph[u.se].clear(); + ended = false; + } } - } - cout << S.size() << ende; - return 0; + cout << S.size() << ende; + return 0; } diff --git a/contests/ICPC_LA16/D.cpp b/contests/ICPC_LA16/D.cpp index f9bf5df..fc8b4de 100644 --- a/contests/ICPC_LA16/D.cpp +++ b/contests/ICPC_LA16/D.cpp @@ -25,31 +25,31 @@ using ii = pair<int,int>; using dd = pair<double,double>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - cout << setprecision(3) << fixed; - - int n; cin >> n; - vector<int> v(n); - for (auto &i : v) cin >> i; - sort(all(v)); - - vector<int> u(n); - int a = 0, b = n - 1; - for (int i = 0; i < n; ++i) { - if (i % 2) u[b--] = v[i]; - else u[a++] = v[i]; - } - - vector<dd> points(n); - for (int i = 0; i < n; ++i) { - points[i].fi = u[i] * cos(to_rad((360.0 / n) * (i + 1))); - points[i].se = u[i] * sin(to_rad((360.0 / n) * (i + 1))); - } - - double sum = 0.0; - for (int i = 0; i < n; ++i) - sum += points[i].fi * points[(i+1) % n].se - points[i].se * points[(i+1)%n].fi; - cout << sum / 2.0 << ende; - return 0; + ios::sync_with_stdio(0); + cin.tie(0); + cout << setprecision(3) << fixed; + + int n; cin >> n; + vector<int> v(n); + for (auto &i : v) cin >> i; + sort(all(v)); + + vector<int> u(n); + int a = 0, b = n - 1; + for (int i = 0; i < n; ++i) { + if (i % 2) u[b--] = v[i]; + else u[a++] = v[i]; + } + + vector<dd> points(n); + for (int i = 0; i < n; ++i) { + points[i].fi = u[i] * cos(to_rad((360.0 / n) * (i + 1))); + points[i].se = u[i] * sin(to_rad((360.0 / n) * (i + 1))); + } + + double sum = 0.0; + for (int i = 0; i < n; ++i) + sum += points[i].fi * points[(i+1) % n].se - points[i].se * points[(i+1)%n].fi; + cout << sum / 2.0 << ende; + return 0; } diff --git a/contests/ICPC_LA16/F.cpp b/contests/ICPC_LA16/F.cpp index b1a5f4a..1d31e61 100644 --- a/contests/ICPC_LA16/F.cpp +++ b/contests/ICPC_LA16/F.cpp @@ -22,18 +22,18 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n, c, s; cin >> n >> c >> s; s--; - int curr = 0, ans = curr == s; - for (int i = 0; i < c; ++i) { - int x; cin >> x; - curr = ((curr + x) + n) % n; - if (curr == s) - ans++; - } - - cout << ans << ende; - return 0; + ios::sync_with_stdio(0); + cin.tie(0); + + int n, c, s; cin >> n >> c >> s; s--; + int curr = 0, ans = curr == s; + for (int i = 0; i < c; ++i) { + int x; cin >> x; + curr = ((curr + x) + n) % n; + if (curr == s) + ans++; + } + + cout << ans << ende; + return 0; } diff --git a/contests/ICPC_LA16/G.cpp b/contests/ICPC_LA16/G.cpp index 3be3491..fe9d676 100644 --- a/contests/ICPC_LA16/G.cpp +++ b/contests/ICPC_LA16/G.cpp @@ -22,66 +22,66 @@ using ll = long long; using ii = pair<int,int>; struct KMP { - vector<int> patt; - vector<int> table; + vector<int> patt; + vector<int> table; - KMP(vector<int> patt) : - patt(patt), table(patt.size()+1) - { preprocess(); } + KMP(vector<int> patt) : + patt(patt), table(patt.size()+1) + { preprocess(); } - void preprocess() { - fill(all(table), -1); + void preprocess() { + fill(all(table), -1); - for (int i = 0, j = -1; i < patt.size(); ++i) { - while (j >= 0 && patt[i] != patt[j] && (patt[j] || patt[i] <= j)) - j = table[j]; - table[i + 1] = ++j; - } - } - - int search(const vector<int> &txt) { - int ans = 0; - for (int i = 0, j = 0; i < txt.size(); ++i) { - while (j >= 0 && txt[i] != patt[j] && (patt[j] || txt[i] <= j)) - j = table[j]; - ++j; - if (j == patt.size()) { - ans++; - j = table[j]; - } + for (int i = 0, j = -1; i < patt.size(); ++i) { + while (j >= 0 && patt[i] != patt[j] && (patt[j] || patt[i] <= j)) + j = table[j]; + table[i + 1] = ++j; + } } - return ans; - } + int search(const vector<int> &txt) { + int ans = 0; + for (int i = 0, j = 0; i < txt.size(); ++i) { + while (j >= 0 && txt[i] != patt[j] && (patt[j] || txt[i] <= j)) + j = table[j]; + ++j; + if (j == patt.size()) { + ans++; + j = table[j]; + } + } + + return ans; + } }; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - string s; cin >> s; - int n; cin >> n; - vector<int> v(n); - for (auto &i : v) { - cin >> i; --i; - } - - vector<int> last(30, -1); - vector<int> A(s.size()), B(n); - for (int i = 0; i < s.size(); ++i) { - if (last[s[i] - 'a'] == -1) A[i] = 0; - else A[i] = i - last[s[i] - 'a']; - last[s[i] - 'a'] = i; - } - - fill(all(last), -1); - for (int i = 0; i < v.size(); ++i) { - if (last[v[i]] == -1) B[i] = 0; - else B[i] = i - last[v[i]]; - last[v[i]] = i; - } - - KMP kmp(B); - cout << kmp.search(A) << ende; - return 0; + ios::sync_with_stdio(0); + cin.tie(0); + + string s; cin >> s; + int n; cin >> n; + vector<int> v(n); + for (auto &i : v) { + cin >> i; --i; + } + + vector<int> last(30, -1); + vector<int> A(s.size()), B(n); + for (int i = 0; i < s.size(); ++i) { + if (last[s[i] - 'a'] == -1) A[i] = 0; + else A[i] = i - last[s[i] - 'a']; + last[s[i] - 'a'] = i; + } + + fill(all(last), -1); + for (int i = 0; i < v.size(); ++i) { + if (last[v[i]] == -1) B[i] = 0; + else B[i] = i - last[v[i]]; + last[v[i]] = i; + } + + KMP kmp(B); + cout << kmp.search(A) << ende; + return 0; } diff --git a/contests/ICPC_LA16/H.cpp b/contests/ICPC_LA16/H.cpp index e192a2f..40731a4 100644 --- a/contests/ICPC_LA16/H.cpp +++ b/contests/ICPC_LA16/H.cpp @@ -22,22 +22,22 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n, k; cin >> n >> k; - - int ans = 0; - multiset<int> S; - for (int i = 0; i < n; ++i) { - int x; cin >> x; - ans += x; - S.insert(x); - while (S.size() > (i + 1) / (k + 1)) - S.erase(S.begin()); - } - - for (auto i : S) ans -= i; - cout << ans << ende; - return 0; + ios::sync_with_stdio(0); + cin.tie(0); + + int n, k; cin >> n >> k; + + int ans = 0; + multiset<int> S; + for (int i = 0; i < n; ++i) { + int x; cin >> x; + ans += x; + S.insert(x); + while (S.size() > (i + 1) / (k + 1)) + S.erase(S.begin()); + } + + for (auto i : S) ans -= i; + cout << ans << ende; + return 0; } diff --git a/contests/ICPC_LA16/J.cpp b/contests/ICPC_LA16/J.cpp index 60a7573..d476057 100644 --- a/contests/ICPC_LA16/J.cpp +++ b/contests/ICPC_LA16/J.cpp @@ -22,23 +22,23 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n; cin >> n; - if (n == 2) return cout << 2 << ende, 0; - for (int i = n; i >= 0; --i) { - if (i % 2 == 0) continue; - bool done = true; - for (int j = 3; j * j <= n; j += 2) - if (i % j == 0) { - done = false; - break; - } - - if (done) - return cout << i << ende, 0; - } - - return 0; + ios::sync_with_stdio(0); + cin.tie(0); + + int n; cin >> n; + if (n == 2) return cout << 2 << ende, 0; + for (int i = n; i >= 0; --i) { + if (i % 2 == 0) continue; + bool done = true; + for (int j = 3; j * j <= n; j += 2) + if (i % j == 0) { + done = false; + break; + } + + if (done) + return cout << i << ende, 0; + } + + return 0; } diff --git a/contests/ICPC_LA16/K.cpp b/contests/ICPC_LA16/K.cpp index 6e46d23..39d648e 100644 --- a/contests/ICPC_LA16/K.cpp +++ b/contests/ICPC_LA16/K.cpp @@ -22,117 +22,117 @@ using ll = long long; using ii = pair<int,int>; struct Dinic { - struct Edge { int u, f, c, r; }; + struct Edge { int u, f, c, r; }; - int N; - vector<int> depth, start; - vector<vector<Edge>> graph; + int N; + vector<int> depth, start; + vector<vector<Edge>> graph; - Dinic(int N) : - N(N), depth(N), start(N), graph(N) {} + Dinic(int N) : + N(N), depth(N), start(N), graph(N) {} - void add_edge(int s, int t, int c) { - Edge forw = { t, 0, c, (int) graph[t].size() }; - Edge back = { s, 0, 0, (int) graph[s].size() }; + void add_edge(int s, int t, int c) { + Edge forw = { t, 0, c, (int) graph[t].size() }; + Edge back = { s, 0, 0, (int) graph[s].size() }; - graph[s].pb(forw); - graph[t].pb(back); - } + graph[s].pb(forw); + graph[t].pb(back); + } - bool bfs(int s, int t) { - queue<int> Q; - Q.push(s); + bool bfs(int s, int t) { + queue<int> Q; + Q.push(s); - fill(all(depth), -1); - depth[s] = 0; + fill(all(depth), -1); + depth[s] = 0; - while (!Q.empty()) { - int v = Q.front(); Q.pop(); + while (!Q.empty()) { + int v = Q.front(); Q.pop(); - for (auto i : graph[v]) - if (depth[i.u] == -1 && i.f < i.c) { - depth[i.u] = depth[v] + 1; - Q.push(i.u); + for (auto i : graph[v]) + if (depth[i.u] == -1 && i.f < i.c) { + depth[i.u] = depth[v] + 1; + Q.push(i.u); + } } - } - return depth[t] != -1; - } + return depth[t] != -1; + } - int dfs(int s, int t, int f) { - if (s == t) - return f; + int dfs(int s, int t, int f) { + if (s == t) + return f; - for ( ; start[s] < graph[s].size(); ++start[s]) { - Edge &e = graph[s][start[s]]; + for ( ; start[s] < graph[s].size(); ++start[s]) { + Edge &e = graph[s][start[s]]; - if (depth[e.u] == depth[s] + 1 && e.f < e.c) { - int min_f = dfs(e.u, t, min(f, e.c - e.f)); + if (depth[e.u] == depth[s] + 1 && e.f < e.c) { + int min_f = dfs(e.u, t, min(f, e.c - e.f)); - if (min_f > 0) { - e.f += min_f; - graph[e.u][e.r].f -= min_f; - return min_f; + if (min_f > 0) { + e.f += min_f; + graph[e.u][e.r].f -= min_f; + return min_f; + } + } } - } + + return 0; } - return 0; - } + int run(int s, int t) { + int ans = 0; + while (bfs(s, t)) { + fill(all(start), 0); - int run(int s, int t) { - int ans = 0; - while (bfs(s, t)) { - fill(all(start), 0); + while (int flow = dfs(s, t, inf)) + ans += flow; + } - while (int flow = dfs(s, t, inf)) - ans += flow; + return ans; } - - return ans; - } }; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n; cin >> n; - vector<ii> v(n+1); - for (int i = 1; i <= n; ++i) - cin >> v[i].fi >> v[i].se; - - int ans = 0; - for (int i = 1; i <= n; ++i) { - int votes = 0, pass = 0; - int s = 0, t = 2*n + 1; - Dinic dinic(t + 1); - - for (int j = 1; j <= n; ++j) { - if (i == j) - continue; - - if (v[j].fi == i || v[j].se == i) { - votes++; - continue; - } - - dinic.add_edge(s, j, 1); - dinic.add_edge(j, v[j].fi + n, 1); - dinic.add_edge(j, v[j].se + n, 1); - pass++; - } + ios::sync_with_stdio(0); + cin.tie(0); + + int n; cin >> n; + vector<ii> v(n+1); + for (int i = 1; i <= n; ++i) + cin >> v[i].fi >> v[i].se; - for (int j = 1; j <= n; ++j) - if (v[i].fi == j || v[i].se == j) - dinic.add_edge(j + n, t, votes - 2); - else - dinic.add_edge(j + n, t, votes - 1); + int ans = 0; + for (int i = 1; i <= n; ++i) { + int votes = 0, pass = 0; + int s = 0, t = 2*n + 1; + Dinic dinic(t + 1); + + for (int j = 1; j <= n; ++j) { + if (i == j) + continue; + + if (v[j].fi == i || v[j].se == i) { + votes++; + continue; + } + + dinic.add_edge(s, j, 1); + dinic.add_edge(j, v[j].fi + n, 1); + dinic.add_edge(j, v[j].se + n, 1); + pass++; + } - if (dinic.run(s, t) < pass) - ans++; - } + for (int j = 1; j <= n; ++j) + if (v[i].fi == j || v[i].se == j) + dinic.add_edge(j + n, t, votes - 2); + else + dinic.add_edge(j + n, t, votes - 1); - cout << ans << ende; - return 0; + if (dinic.run(s, t) < pass) + ans++; + } + + cout << ans << ende; + return 0; } diff --git a/contests/ICPC_LA17/B.cpp b/contests/ICPC_LA17/B.cpp index b5a56d7..cb5b6ba 100644 --- a/contests/ICPC_LA17/B.cpp +++ b/contests/ICPC_LA17/B.cpp @@ -22,51 +22,51 @@ using ll = long long; using ii = pair<int,int>; bool is_vowel(char x) { - return x == 'a' || x == 'e' || x == 'i' || x == 'o' || x == 'u'; + return x == 'a' || x == 'e' || x == 'i' || x == 'o' || x == 'u'; } int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - int num_vow = 0; - string s; cin >> s; - for (auto i : s) num_vow += is_vowel(i); - if (num_vow && !is_vowel(s[0])) - return cout << 0 << ende, 0; - if (num_vow == 0) - return cout << 1 << ende, 0; + int num_vow = 0; + string s; cin >> s; + for (auto i : s) num_vow += is_vowel(i); + if (num_vow && !is_vowel(s[0])) + return cout << 0 << ende, 0; + if (num_vow == 0) + return cout << 1 << ende, 0; - int i = 0, n = s.size() - 1; - bool inverted = false; + int i = 0, n = s.size() - 1; + bool inverted = false; - auto invert = [&]() { - swap(i, n); - inverted = !inverted; - }; + auto invert = [&]() { + swap(i, n); + inverted = !inverted; + }; - auto trim_tail = [&]() { - if (inverted) n++; - else n--; - }; + auto trim_tail = [&]() { + if (inverted) n++; + else n--; + }; - int ans = 0; - while (abs(n - i)) { - if (is_vowel(s[i]) && is_vowel(s[n])) { - invert(); - trim_tail(); - num_vow--; - } else if (!is_vowel(s[i]) && is_vowel(s[n])) { - break; - } else if (is_vowel(s[i]) && !is_vowel(s[n])) { - if (num_vow == 1) ans++; - trim_tail(); - } else if (!is_vowel(s[i]) && !is_vowel(s[n])) { - trim_tail(); + int ans = 0; + while (abs(n - i)) { + if (is_vowel(s[i]) && is_vowel(s[n])) { + invert(); + trim_tail(); + num_vow--; + } else if (!is_vowel(s[i]) && is_vowel(s[n])) { + break; + } else if (is_vowel(s[i]) && !is_vowel(s[n])) { + if (num_vow == 1) ans++; + trim_tail(); + } else if (!is_vowel(s[i]) && !is_vowel(s[n])) { + trim_tail(); + } } - } - if (i == n && is_vowel(s[i])) ans++; - cout << ans << ende; - return 0; + if (i == n && is_vowel(s[i])) ans++; + cout << ans << ende; + return 0; } diff --git a/contests/ICPC_LA17/C.cpp b/contests/ICPC_LA17/C.cpp index 25d1986..4da5b23 100644 --- a/contests/ICPC_LA17/C.cpp +++ b/contests/ICPC_LA17/C.cpp @@ -22,40 +22,40 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n, k; cin >> k >> n; - vector<int> cnt(k + 1); - for (int i = 0; i < n; ++i) { - int x; cin >> x; cnt[x]++; - } - - set<int> S; - vector<int> v; - - for (int i = 1; i <= k; ++i) S.insert(cnt[i]); - for (auto i : S) v.pb(i); - - auto find_cnt = [&](int x) { - for (int i = 1; i <= k; ++i) - if (cnt[i] == x) - return i; - - assert(false); - }; - - int flo = n / k; - int cei = (n - 1) / k + 1; - - if (n % k == 0 && (v.size() == 3 && v[0] == v[1] - 1 && v[1] == v[2] - 1)) - cout << "-" << find_cnt(v[2]) << " " << "+" << find_cnt(v[0]) << ende; - else if (flo * k + 1 == n && (v.size() == 2 && v[0] == v[1] - 1)) - cout << "-" << find_cnt(v[1]) << ende; - else if (cei * k - 1 == n && (v.size() == 2 && v[0] == v[1] - 1)) - cout << "+" << find_cnt(v[0]) << ende; - else - cout << "*" << ende; - - return 0; + ios::sync_with_stdio(0); + cin.tie(0); + + int n, k; cin >> k >> n; + vector<int> cnt(k + 1); + for (int i = 0; i < n; ++i) { + int x; cin >> x; cnt[x]++; + } + + set<int> S; + vector<int> v; + + for (int i = 1; i <= k; ++i) S.insert(cnt[i]); + for (auto i : S) v.pb(i); + + auto find_cnt = [&](int x) { + for (int i = 1; i <= k; ++i) + if (cnt[i] == x) + return i; + + assert(false); + }; + + int flo = n / k; + int cei = (n - 1) / k + 1; + + if (n % k == 0 && (v.size() == 3 && v[0] == v[1] - 1 && v[1] == v[2] - 1)) + cout << "-" << find_cnt(v[2]) << " " << "+" << find_cnt(v[0]) << ende; + else if (flo * k + 1 == n && (v.size() == 2 && v[0] == v[1] - 1)) + cout << "-" << find_cnt(v[1]) << ende; + else if (cei * k - 1 == n && (v.size() == 2 && v[0] == v[1] - 1)) + cout << "+" << find_cnt(v[0]) << ende; + else + cout << "*" << ende; + + return 0; } diff --git a/contests/ICPC_LA17/D.cpp b/contests/ICPC_LA17/D.cpp index dde13c8..e74ecd3 100644 --- a/contests/ICPC_LA17/D.cpp +++ b/contests/ICPC_LA17/D.cpp @@ -23,51 +23,51 @@ using ii = pair<int,int>; using iii = pair<ii,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - ll l, c, n; cin >> l >> c >> n; - set<iii> S; - S.insert(iii(ii(0, l - 1), 1)); - vector<ll> num(c+1, 0); - num[1] = l; - - for (int i = 0; i < n; ++i) { - ll p, x, a, b; cin >> p >> x >> a >> b; - int m1 = (a + num[p] * num[p]) % l; - int m2 = (a + (num[p] + b) * (num[p] + b)) % l; - - if (m1 > m2) swap(m1, m2); - auto curr = prev(S.lower_bound(iii(ii(m1 + 1, -inf), -inf))); - - vector<iii> ins, del; - ins.pb(iii(ii(m1, m2), x)); - for ( ; curr != S.end() && curr->fi.fi <= m2; ++curr) { - num[curr->se] -= curr->fi.se - curr->fi.fi + 1; - - // m1 intersects with section - if (m1 >= curr->fi.fi && m1 <= curr->fi.se) { - ins.pb(iii(ii(curr->fi.fi, m1 - 1), curr->se)); - num[curr->se] += (m1 - 1) - curr->fi.fi + 1; - } - - // m2 intersects with section - if (m2 >= curr->fi.fi && m2 <= curr->fi.se) { - ins.pb(iii(ii(m2 + 1, curr->fi.se), curr->se)); - num[curr->se] += curr->fi.se - (m2 + 1) + 1; - } - - num[x] += min(m2, curr->fi.se) - max(m1, curr->fi.fi) + 1; - del.pb(*curr); - } + ios::sync_with_stdio(0); + cin.tie(0); + + ll l, c, n; cin >> l >> c >> n; + set<iii> S; + S.insert(iii(ii(0, l - 1), 1)); + vector<ll> num(c+1, 0); + num[1] = l; + + for (int i = 0; i < n; ++i) { + ll p, x, a, b; cin >> p >> x >> a >> b; + int m1 = (a + num[p] * num[p]) % l; + int m2 = (a + (num[p] + b) * (num[p] + b)) % l; + + if (m1 > m2) swap(m1, m2); + auto curr = prev(S.lower_bound(iii(ii(m1 + 1, -inf), -inf))); + + vector<iii> ins, del; + ins.pb(iii(ii(m1, m2), x)); + for ( ; curr != S.end() && curr->fi.fi <= m2; ++curr) { + num[curr->se] -= curr->fi.se - curr->fi.fi + 1; - for (auto j : del) S.erase(j); - for (auto j : ins) S.insert(j); - } + // m1 intersects with section + if (m1 >= curr->fi.fi && m1 <= curr->fi.se) { + ins.pb(iii(ii(curr->fi.fi, m1 - 1), curr->se)); + num[curr->se] += (m1 - 1) - curr->fi.fi + 1; + } + + // m2 intersects with section + if (m2 >= curr->fi.fi && m2 <= curr->fi.se) { + ins.pb(iii(ii(m2 + 1, curr->fi.se), curr->se)); + num[curr->se] += curr->fi.se - (m2 + 1) + 1; + } + + num[x] += min(m2, curr->fi.se) - max(m1, curr->fi.fi) + 1; + del.pb(*curr); + } + + for (auto j : del) S.erase(j); + for (auto j : ins) S.insert(j); + } - ll ans = 0; - for (int i = 1; i <= c; ++i) - ans = max(ans, num[i]); - cout << ans << ende; - return 0; + ll ans = 0; + for (int i = 1; i <= c; ++i) + ans = max(ans, num[i]); + cout << ans << ende; + return 0; } diff --git a/contests/ICPC_LA17/E.cpp b/contests/ICPC_LA17/E.cpp index 302e3bc..71aa7cf 100644 --- a/contests/ICPC_LA17/E.cpp +++ b/contests/ICPC_LA17/E.cpp @@ -27,33 +27,33 @@ string s; int dp[MAX][MAX]; bool solve(int i, int r) { - if (i == s.size()) - return (r % n == 0); - - if (dp[i][r] != -1) - return dp[i][r]; - - if (s[i] == '?') { - for (int j = (i == 0); j <= 9; ++j) - if (solve(i + 1, (r * 10 + j) % n)) { - s[i] = j + '0'; - return dp[i][r] = true; - } - } else { - if (solve(i + 1, (r * 10 + (s[i] - '0')) % n)) - return dp[i][r] = true; - } - - return dp[i][r] = false; + if (i == s.size()) + return (r % n == 0); + + if (dp[i][r] != -1) + return dp[i][r]; + + if (s[i] == '?') { + for (int j = (i == 0); j <= 9; ++j) + if (solve(i + 1, (r * 10 + j) % n)) { + s[i] = j + '0'; + return dp[i][r] = true; + } + } else { + if (solve(i + 1, (r * 10 + (s[i] - '0')) % n)) + return dp[i][r] = true; + } + + return dp[i][r] = false; } int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - cin >> s >> n; - mset(dp, -1); + cin >> s >> n; + mset(dp, -1); - cout << (!solve(0, 0) ? "*" : s) << ende; - return 0; + cout << (!solve(0, 0) ? "*" : s) << ende; + return 0; } diff --git a/contests/ICPC_LA17/F.cpp b/contests/ICPC_LA17/F.cpp index 5842ed3..4123a9d 100644 --- a/contests/ICPC_LA17/F.cpp +++ b/contests/ICPC_LA17/F.cpp @@ -24,82 +24,82 @@ using ii = pair<ll,ll>; using iii = pair<ii,ll>; struct BIT { - int N; - vector<ll> tree; - - BIT(int N) : - N(N), tree(N) - {} - - void init() { - fill(all(tree), 0LL); - } - - ll query(int idx) { - ll sum = 0LL; - for (; idx > 0; idx -= (idx & -idx)) - sum = max(sum, tree[idx]); - return sum; - } - - void update(int idx, ll val) { - for (; idx < N; idx += (idx & -idx)) - tree[idx] = max(tree[idx], val); - } + int N; + vector<ll> tree; + + BIT(int N) : + N(N), tree(N) + {} + + void init() { + fill(all(tree), 0LL); + } + + ll query(int idx) { + ll sum = 0LL; + for (; idx > 0; idx -= (idx & -idx)) + sum = max(sum, tree[idx]); + return sum; + } + + void update(int idx, ll val) { + for (; idx < N; idx += (idx & -idx)) + tree[idx] = max(tree[idx], val); + } }; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - BIT bit(MAX); - bit.init(); - - map<ii,ll> M; - int n; cin >> n; - for (int i = 0; i < n; ++i) { - ll a, b, c; cin >> a >> b >> c; - M[ii(a, b)] += c; - } - - vector<iii> v; - for (auto i : M) - v.pb(iii(ii(i.fi.fi, i.fi.se), i.se)); - n = v.size(); - - sort(all(v), [](const iii &a, const iii &b) { - if (a.fi.fi != b.fi.fi) - return a.fi.fi < b.fi.fi; - else if (a.fi.se != b.fi.se) - return a.fi.se > b.fi.se; - return a.se > b.se; - }); - - set<ll> S; - map<ll,ll> compress; - for (auto i : v) - S.insert(i.fi.se); - - ll k = 1LL; - for (auto i : S) - compress[i] = k++; - for (auto &i : v) - i.fi.se = compress[i.fi.se]; - - ll ans = 0, last = v[0].fi.fi; - for (int i = 0; ; ) { - for (; i < n && v[i].fi.fi == last; ++i) { - ll bst = max(bit.query(v[i].fi.se - 1) + v[i].se, - bit.query(v[i].fi.se)); - - bit.update(v[i].fi.se, bst); - ans = max(ans, bst); + ios::sync_with_stdio(0); + cin.tie(0); + + BIT bit(MAX); + bit.init(); + + map<ii,ll> M; + int n; cin >> n; + for (int i = 0; i < n; ++i) { + ll a, b, c; cin >> a >> b >> c; + M[ii(a, b)] += c; } - if (i >= n) break; - last = v[i].fi.fi; - } + vector<iii> v; + for (auto i : M) + v.pb(iii(ii(i.fi.fi, i.fi.se), i.se)); + n = v.size(); + + sort(all(v), [](const iii &a, const iii &b) { + if (a.fi.fi != b.fi.fi) + return a.fi.fi < b.fi.fi; + else if (a.fi.se != b.fi.se) + return a.fi.se > b.fi.se; + return a.se > b.se; + }); + + set<ll> S; + map<ll,ll> compress; + for (auto i : v) + S.insert(i.fi.se); + + ll k = 1LL; + for (auto i : S) + compress[i] = k++; + for (auto &i : v) + i.fi.se = compress[i.fi.se]; + + ll ans = 0, last = v[0].fi.fi; + for (int i = 0; ; ) { + for (; i < n && v[i].fi.fi == last; ++i) { + ll bst = max(bit.query(v[i].fi.se - 1) + v[i].se, + bit.query(v[i].fi.se)); + + bit.update(v[i].fi.se, bst); + ans = max(ans, bst); + } + + if (i >= n) break; + last = v[i].fi.fi; + } - cout << ans << ende; - return 0; + cout << ans << ende; + return 0; } diff --git a/contests/ICPC_LA17/G.cpp b/contests/ICPC_LA17/G.cpp index 4885756..a0e509c 100644 --- a/contests/ICPC_LA17/G.cpp +++ b/contests/ICPC_LA17/G.cpp @@ -27,54 +27,54 @@ map<ii,int> backw; int L[MAX], R[MAX], val[MAX]; struct comb { - ll pos[4]; + ll pos[4]; - comb() { mset(pos, 0); } + comb() { mset(pos, 0); } - static comb base() { - comb res; - res.pos[0] = res.pos[3] = 1; - return res; - } + static comb base() { + comb res; + res.pos[0] = res.pos[3] = 1; + return res; + } }; comb dfs(int x) { - comb res; - comb l = (L[x]) ? (dfs(L[x])) : (comb::base()); - comb r = (R[x]) ? (dfs(R[x])) : (comb::base()); - - for (int i = 0; i < 4; ++i) - for (int j = 0; j < 4; ++j) { - ii nand = ii(!(forw[i].fi && forw[j].fi), !(forw[i].se && forw[j].se)); - res.pos[backw[nand]] = (res.pos[backw[nand]] + - (l.pos[i] % MOD) * (r.pos[j] % MOD)) % MOD; + comb res; + comb l = (L[x]) ? (dfs(L[x])) : (comb::base()); + comb r = (R[x]) ? (dfs(R[x])) : (comb::base()); + + for (int i = 0; i < 4; ++i) + for (int j = 0; j < 4; ++j) { + ii nand = ii(!(forw[i].fi && forw[j].fi), !(forw[i].se && forw[j].se)); + res.pos[backw[nand]] = (res.pos[backw[nand]] + + (l.pos[i] % MOD) * (r.pos[j] % MOD)) % MOD; + } + + if (val[x] == 0) { + res.pos[0] = (res.pos[0] + res.pos[2]) % MOD, res.pos[2] = 0; + res.pos[1] = (res.pos[1] + res.pos[3]) % MOD, res.pos[3] = 0; + } else if (val[x] == 1) { + res.pos[2] = (res.pos[2] + res.pos[0]) % MOD, res.pos[0] = 0; + res.pos[3] = (res.pos[3] + res.pos[1]) % MOD, res.pos[1] = 0; } - if (val[x] == 0) { - res.pos[0] = (res.pos[0] + res.pos[2]) % MOD, res.pos[2] = 0; - res.pos[1] = (res.pos[1] + res.pos[3]) % MOD, res.pos[3] = 0; - } else if (val[x] == 1) { - res.pos[2] = (res.pos[2] + res.pos[0]) % MOD, res.pos[0] = 0; - res.pos[3] = (res.pos[3] + res.pos[1]) % MOD, res.pos[1] = 0; - } - - return res; + return res; } int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - int n; cin >> n; - for (int i = 1; i <= n; ++i) - cin >> L[i] >> R[i] >> val[i]; + int n; cin >> n; + for (int i = 1; i <= n; ++i) + cin >> L[i] >> R[i] >> val[i]; - forw[0] = ii(0, 0); backw[ii(0, 0)] = 0; - forw[1] = ii(0, 1); backw[ii(0, 1)] = 1; - forw[2] = ii(1, 0); backw[ii(1, 0)] = 2; - forw[3] = ii(1, 1); backw[ii(1, 1)] = 3; + forw[0] = ii(0, 0); backw[ii(0, 0)] = 0; + forw[1] = ii(0, 1); backw[ii(0, 1)] = 1; + forw[2] = ii(1, 0); backw[ii(1, 0)] = 2; + forw[3] = ii(1, 1); backw[ii(1, 1)] = 3; - comb ans = dfs(1); - cout << (ans.pos[1] + ans.pos[2]) % MOD << ende; - return 0; + comb ans = dfs(1); + cout << (ans.pos[1] + ans.pos[2]) % MOD << ende; + return 0; } diff --git a/contests/ICPC_LA17/H.cpp b/contests/ICPC_LA17/H.cpp index 0b1156f..06c28a8 100644 --- a/contests/ICPC_LA17/H.cpp +++ b/contests/ICPC_LA17/H.cpp @@ -22,12 +22,12 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - int a, b, c; cin >> a >> b >> c; - int d, e, f; cin >> d >> e >> f; + int a, b, c; cin >> a >> b >> c; + int d, e, f; cin >> d >> e >> f; - cout << max(0, d - a) + max(0, e - b) + max(0, f - c) << ende; - return 0; + cout << max(0, d - a) + max(0, e - b) + max(0, f - c) << ende; + return 0; } diff --git a/contests/ICPC_LA17/I.cpp b/contests/ICPC_LA17/I.cpp index 1056fd6..735e2cf 100644 --- a/contests/ICPC_LA17/I.cpp +++ b/contests/ICPC_LA17/I.cpp @@ -31,55 +31,55 @@ int pare[MAX]; int size[MAX]; void make_set(int x) { - pare[x] = x; - size[x] = 1; + pare[x] = x; + size[x] = 1; } int find_set(int x) { - if (pare[x] != x) - pare[x] = find_set(pare[x]); - return pare[x]; + if (pare[x] != x) + pare[x] = find_set(pare[x]); + return pare[x]; } void union_set(int x, int y) { - x = find_set(x); - y = find_set(y); + x = find_set(x); + y = find_set(y); - if (x == y) - return; + if (x == y) + return; - if (size[x] > size[y]) - swap(x, y); + if (size[x] > size[y]) + swap(x, y); - pare[x] = y; - size[y] += size[x]; + pare[x] = y; + size[y] += size[x]; } int kruskal() { - sort(all(edges), [&](const iii &a, const iii &b) { - return a.se < b.se; - }); + sort(all(edges), [&](const iii &a, const iii &b) { + return a.se < b.se; + }); - int ans = 0; - for (int i = 0; i < MAX; i++) - make_set(i); + int ans = 0; + for (int i = 0; i < MAX; i++) + make_set(i); - for (int i = 0; i < edges.size(); i++) { - int pu = find_set(edges[i].fi.fi); - int pv = find_set(edges[i].fi.se); + for (int i = 0; i < edges.size(); i++) { + int pu = find_set(edges[i].fi.fi); + int pv = find_set(edges[i].fi.se); - if (pu != pv) { - mst[edges[i].fi] = true; + if (pu != pv) { + mst[edges[i].fi] = true; - graph[edges[i].fi.fi].pb(ii(edges[i].fi.se, edges[i].se)); - graph[edges[i].fi.se].pb(ii(edges[i].fi.fi, edges[i].se)); + graph[edges[i].fi.fi].pb(ii(edges[i].fi.se, edges[i].se)); + graph[edges[i].fi.se].pb(ii(edges[i].fi.fi, edges[i].se)); - ans += edges[i].se; - union_set(pu, pv); + ans += edges[i].se; + union_set(pu, pv); + } } - } - return ans; + return ans; } #define MAXLOG 20 @@ -89,84 +89,84 @@ int par[MAX][MAXLOG]; int cost[MAX][MAXLOG]; void dfs(int v, int p = -1, int c = 0) { - par[v][0] = p; - cost[v][0] = c; + par[v][0] = p; + cost[v][0] = c; - if (p != -1) - h[v] = h[p] + 1; + if (p != -1) + h[v] = h[p] + 1; - for (int i = 1; i < MAXLOG; ++i) - if (par[v][i - 1] != -1) { - par[v][i] = par[par[v][i - 1]][i - 1]; - cost[v][i] = max(cost[v][i], max(cost[par[v][i-1]][i-1], cost[v][i-1])); - } + for (int i = 1; i < MAXLOG; ++i) + if (par[v][i - 1] != -1) { + par[v][i] = par[par[v][i - 1]][i - 1]; + cost[v][i] = max(cost[v][i], max(cost[par[v][i-1]][i-1], cost[v][i-1])); + } - for (auto u : graph[v]) - if (p != u.fi) - dfs(u.fi, v, u.se); + for (auto u : graph[v]) + if (p != u.fi) + dfs(u.fi, v, u.se); } void preprocess(int v) { - memset(par, -1, sizeof par); - memset(cost, 0, sizeof cost); - dfs(v); + memset(par, -1, sizeof par); + memset(cost, 0, sizeof cost); + dfs(v); } int query(int p, int q) { - int ans = 0; + int ans = 0; - if (h[p] < h[q]) - swap(p, q); + if (h[p] < h[q]) + swap(p, q); - for (int i = MAXLOG - 1; i >= 0; --i) - if (par[p][i] != -1 && h[par[p][i]] >= h[q]) { - ans = max(ans, cost[p][i]); - p = par[p][i]; - } + for (int i = MAXLOG - 1; i >= 0; --i) + if (par[p][i] != -1 && h[par[p][i]] >= h[q]) { + ans = max(ans, cost[p][i]); + p = par[p][i]; + } - if (p == q) - return ans; + if (p == q) + return ans; - for (int i = MAXLOG - 1; i >= 0; --i) - if (par[p][i] != -1 && par[p][i] != par[q][i]) { - ans = max(ans, max(cost[p][i], cost[q][i])); - p = par[p][i]; - q = par[q][i]; - } + for (int i = MAXLOG - 1; i >= 0; --i) + if (par[p][i] != -1 && par[p][i] != par[q][i]) { + ans = max(ans, max(cost[p][i], cost[q][i])); + p = par[p][i]; + q = par[q][i]; + } - if (p == q) return ans; - else return max(ans, max(cost[p][0], cost[q][0])); + if (p == q) return ans; + else return max(ans, max(cost[p][0], cost[q][0])); } int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n, r; cin >> n >> r; - map<ii,int> M; - - for (int i = 0; i < r; ++i) { - int a, b, c; cin >> a >> b >> c; - a--, b--; - M[ii(a, b)] = c; - M[ii(b, a)] = c; - edges.pb(iii(ii(a, b), c)); - edges.pb(iii(ii(b, a), c)); - } - - int vmst = kruskal(); - preprocess(0); - - int q; cin >> q; - for (int i = 0; i < q; ++i) { - int a, b; cin >> a >> b; - a--, b--; - - if (mst[ii(a, b)] || mst[ii(b, a)]) - cout << vmst << ende; - else - cout << vmst - query(a, b) + M[ii(a, b)] << ende; - } - - return 0; + ios::sync_with_stdio(0); + cin.tie(0); + + int n, r; cin >> n >> r; + map<ii,int> M; + + for (int i = 0; i < r; ++i) { + int a, b, c; cin >> a >> b >> c; + a--, b--; + M[ii(a, b)] = c; + M[ii(b, a)] = c; + edges.pb(iii(ii(a, b), c)); + edges.pb(iii(ii(b, a), c)); + } + + int vmst = kruskal(); + preprocess(0); + + int q; cin >> q; + for (int i = 0; i < q; ++i) { + int a, b; cin >> a >> b; + a--, b--; + + if (mst[ii(a, b)] || mst[ii(b, a)]) + cout << vmst << ende; + else + cout << vmst - query(a, b) + M[ii(a, b)] << ende; + } + + return 0; } diff --git a/contests/ICPC_LA17/J.cpp b/contests/ICPC_LA17/J.cpp index f7c4b7f..86638a9 100644 --- a/contests/ICPC_LA17/J.cpp +++ b/contests/ICPC_LA17/J.cpp @@ -22,47 +22,47 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - string s; cin >> s; - int r = 0, n = s.size(); - for (int i = 0; i < n; ++i) - r += (s[i] == 'R'); + string s; cin >> s; + int r = 0, n = s.size(); + for (int i = 0; i < n; ++i) + r += (s[i] == 'R'); - if (r == n) - return cout << n - 1 << ende, 0; + if (r == n) + return cout << n - 1 << ende, 0; - vector<int> divs; - for (int i = 2; i*i <= n; ++i) - if (n % i == 0) { - divs.pb(i); - if (i != n / i) - divs.pb(n / i); - } + vector<int> divs; + for (int i = 2; i*i <= n; ++i) + if (n % i == 0) { + divs.pb(i); + if (i != n / i) + divs.pb(n / i); + } - vector<int> nums(n, 0); - for (int i = 2; i < n; ++i) - nums[__gcd(i, n)]++; + vector<int> nums(n, 0); + for (int i = 2; i < n; ++i) + nums[__gcd(i, n)]++; - int ans = 0; - for (auto i : divs) { - bool poss = false; - for (int j = 0; j < i; ++j) { - bool onlyr = true; - for (int k = j; k < n; k += i) - onlyr &= (s[k] == 'R'); + int ans = 0; + for (auto i : divs) { + bool poss = false; + for (int j = 0; j < i; ++j) { + bool onlyr = true; + for (int k = j; k < n; k += i) + onlyr &= (s[k] == 'R'); - if (onlyr) { - poss = true; - break; - } - } + if (onlyr) { + poss = true; + break; + } + } - if (poss) - ans += nums[i]; - } + if (poss) + ans += nums[i]; + } - cout << ans << ende; - return 0; + cout << ans << ende; + return 0; } diff --git a/contests/ICPC_LA18/A.cpp b/contests/ICPC_LA18/A.cpp index d59077b..f6025b7 100644 --- a/contests/ICPC_LA18/A.cpp +++ b/contests/ICPC_LA18/A.cpp @@ -22,15 +22,15 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - string s; cin >> s; - s.erase(s.begin() + s.size() - 3); - stringstream x(s); + string s; cin >> s; + s.erase(s.begin() + s.size() - 3); + stringstream x(s); - int r; x >> r; - cout << 36000 / __gcd(36000, r) << ende; + int r; x >> r; + cout << 36000 / __gcd(36000, r) << ende; - return 0; + return 0; } diff --git a/contests/ICPC_LA18/B.cpp b/contests/ICPC_LA18/B.cpp index a4eb7ff..4e37e5c 100644 --- a/contests/ICPC_LA18/B.cpp +++ b/contests/ICPC_LA18/B.cpp @@ -22,33 +22,33 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - int n; cin >> n; - vector<int> v(n), pref(n); - for (auto &i : v) cin >> i; + int n; cin >> n; + vector<int> v(n), pref(n); + for (auto &i : v) cin >> i; - pref[0] = v[0]; - for (int i = 1; i < n; ++i) - pref[i] = pref[i-1] + v[i]; + pref[0] = v[0]; + for (int i = 1; i < n; ++i) + pref[i] = pref[i-1] + v[i]; - if (pref.back() % 2) - return cout << "N" << ende, 0; + if (pref.back() % 2) + return cout << "N" << ende, 0; - int beg = 0, ans = 0; - for (int i = 0; i < n; ++i) { - while (beg < i && pref[i] - pref[beg] > pref.back() / 2) - beg++; + int beg = 0, ans = 0; + for (int i = 0; i < n; ++i) { + while (beg < i && pref[i] - pref[beg] > pref.back() / 2) + beg++; - if (pref[i] - pref[beg] == (pref.back() / 2)) - ans++; - } + if (pref[i] - pref[beg] == (pref.back() / 2)) + ans++; + } - if (ans >= 2) - cout << "Y" << ende; - else - cout << "N" << ende; + if (ans >= 2) + cout << "Y" << ende; + else + cout << "N" << ende; - return 0; + return 0; } diff --git a/contests/ICPC_LA18/C.cpp b/contests/ICPC_LA18/C.cpp index ad43314..4f63e0d 100644 --- a/contests/ICPC_LA18/C.cpp +++ b/contests/ICPC_LA18/C.cpp @@ -27,41 +27,41 @@ int d[MAX], c[MAX]; int dp[MAX][6][123]; int fix(int x) { - return min(x, 121); + return min(x, 121); } int solve(int i, int state, int mi) { - if (i == n) - return 0; + if (i == n) + return 0; - if (dp[i][state][mi] != -1) - return dp[i][state][mi]; + if (dp[i][state][mi] != -1) + return dp[i][state][mi]; - if (state == 0 || mi >= 120) - return dp[i][state][mi] = solve(i + 1, 1, fix(d[i])) + c[i]; + if (state == 0 || mi >= 120) + return dp[i][state][mi] = solve(i + 1, 1, fix(d[i])) + c[i]; - if (state == 1) - return dp[i][state][mi] = - min(solve(i + 1, state + 1, fix(mi + d[i])) + (c[i] / 2), - solve(i + 1, 1, fix(d[i])) + c[i]); - else - return dp[i][state][mi] = - min(solve(i + 1, (state + 1) % 6, fix(mi + d[i])) + (c[i] / 4), - solve(i + 1, 1, fix(d[i])) + c[i]); + if (state == 1) + return dp[i][state][mi] = + min(solve(i + 1, state + 1, fix(mi + d[i])) + (c[i] / 2), + solve(i + 1, 1, fix(d[i])) + c[i]); + else + return dp[i][state][mi] = + min(solve(i + 1, (state + 1) % 6, fix(mi + d[i])) + (c[i] / 4), + solve(i + 1, 1, fix(d[i])) + c[i]); } int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - cin >> n; - for (int i = 0; i < n; ++i) { - cin >> d[i] >> c[i]; - c[i] *= 100; - } + cin >> n; + for (int i = 0; i < n; ++i) { + cin >> d[i] >> c[i]; + c[i] *= 100; + } - mset(dp, -1); - int ans = solve(0, 0, 0); - cout << (ans / 100) << "." << setfill('0') << setw(2) << (ans % 100) << ende; - return 0; + mset(dp, -1); + int ans = solve(0, 0, 0); + cout << (ans / 100) << "." << setfill('0') << setw(2) << (ans % 100) << ende; + return 0; } diff --git a/contests/ICPC_LA18/E.cpp b/contests/ICPC_LA18/E.cpp index 556ea4c..4e88d08 100644 --- a/contests/ICPC_LA18/E.cpp +++ b/contests/ICPC_LA18/E.cpp @@ -22,41 +22,41 @@ using ll = long long; using ii = pair<int,int>; struct Point { - double x, y; - Point() {} - Point(double x, double y) : x(x), y(y) {} - Point operator-(Point a) { return Point(x - a.x, y - a.y); } + double x, y; + Point() {} + Point(double x, double y) : x(x), y(y) {} + Point operator-(Point a) { return Point(x - a.x, y - a.y); } }; int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - ll n; cin >> n; - vector<Point> v(n); - for (auto &i : v) - cin >> i.x >> i.y; + ll n; cin >> n; + vector<Point> v(n); + for (auto &i : v) + cin >> i.x >> i.y; - ll ans = (n * (n - 1LL) * (n - 2LL)) / 6LL; - for (int i = 0; i < n; ++i) { - ll l = i + 1, r = i + n - 1; + ll ans = (n * (n - 1LL) * (n - 2LL)) / 6LL; + for (int i = 0; i < n; ++i) { + ll l = i + 1, r = i + n - 1; - for (int j = 0; j < 20; ++j) { - ll m = (l + r) / 2; + for (int j = 0; j < 20; ++j) { + ll m = (l + r) / 2; - Point a = v[(i+1)%n] - v[i]; - Point b = v[(m+1)%n] - v[m%n]; + Point a = v[(i+1)%n] - v[i]; + Point b = v[(m+1)%n] - v[m%n]; - double ang = (atan2(-(a.x*b.y - a.y*b.x), -(a.x*b.x + a.y*b.y)) * 180.0) / M_PI + 180.0; - if (ang > 180.0) - r = m; - else - l = m; - } + double ang = (atan2(-(a.x*b.y - a.y*b.x), -(a.x*b.x + a.y*b.y)) * 180.0) / M_PI + 180.0; + if (ang > 180.0) + r = m; + else + l = m; + } - ans -= ((l - i) * (l - i - 1LL)) / 2LL; - } + ans -= ((l - i) * (l - i - 1LL)) / 2LL; + } - cout << ans << ende; - return 0; + cout << ans << ende; + return 0; } diff --git a/contests/ICPC_LA18/F.cpp b/contests/ICPC_LA18/F.cpp index b21af32..459c870 100644 --- a/contests/ICPC_LA18/F.cpp +++ b/contests/ICPC_LA18/F.cpp @@ -24,105 +24,105 @@ using ii = pair<ll,ll>; struct ans_t { ll x, y, d; }; ans_t ext_gcd(ll a, ll b) { - if (a == 0) return {0, 1, b}; - ans_t e = ext_gcd(b % a, a); - return {e.y - (b/a) * e.x, e.x, e.d}; + if (a == 0) return {0, 1, b}; + ans_t e = ext_gcd(b % a, a); + return {e.y - (b/a) * e.x, e.x, e.d}; } ll norm(ll a, ll b) { - a %= b; - return (a < 0) ? a + b : a; + a %= b; + return (a < 0) ? a + b : a; } pair<ll,ll> crt_single(ll a, ll n, ll b, ll m) { - ans_t e = ext_gcd(n, m); + ans_t e = ext_gcd(n, m); - if ((a - b) % e.d != 0) - return {-1,-1}; + if ((a - b) % e.d != 0) + return {-1,-1}; - ll lcm = (m/e.d) * n; - ll ans = norm(a + e.x*(b-a) / e.d % (m/e.d)*n, lcm); - return {norm(ans, lcm), lcm}; + ll lcm = (m/e.d) * n; + ll ans = norm(a + e.x*(b-a) / e.d % (m/e.d)*n, lcm); + return {norm(ans, lcm), lcm}; } ll crt(vector<ll> a, vector<ll> m) { - ll ans = a[0]; - ll lcm = m[0]; + ll ans = a[0]; + ll lcm = m[0]; - int t = a.size(); - for (int i = 1; i < t; ++i) { - auto ss = crt_single(ans, lcm, a[i], m[i]); - if (ss.fi == -1) - return -1; + int t = a.size(); + for (int i = 1; i < t; ++i) { + auto ss = crt_single(ans, lcm, a[i], m[i]); + if (ss.fi == -1) + return -1; - ans = ss.fi; - lcm = ss.se; - } + ans = ss.fi; + lcm = ss.se; + } - return ans; + return ans; } int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - int b, z; cin >> b >> z; - vector<vector<int>> mat(b, vector<int>(z+1)); - vector<vector<int>> time(z+1, vector<int>(501)); - vector<vector<ll>> a(z + 1, vector<ll>(b, -1)); - vector<vector<ll>> m(z + 1, vector<ll>(b, -1)); + int b, z; cin >> b >> z; + vector<vector<int>> mat(b, vector<int>(z+1)); + vector<vector<int>> time(z+1, vector<int>(501)); + vector<vector<ll>> a(z + 1, vector<ll>(b, -1)); + vector<vector<ll>> m(z + 1, vector<ll>(b, -1)); - for (auto &i : mat) - for (auto &j : i) cin >> j; + for (auto &i : mat) + for (auto &j : i) cin >> j; - for (int i = 0; i < b; ++i) { - int curr = mat[i][0]; - time[curr][0] |= (1 << i); + for (int i = 0; i < b; ++i) { + int curr = mat[i][0]; + time[curr][0] |= (1 << i); - for (int t = 1; t <= 500; ++t) { - curr = mat[i][curr]; - time[curr][t] |= (1 << i); + for (int t = 1; t <= 500; ++t) { + curr = mat[i][curr]; + time[curr][t] |= (1 << i); + } } - } - - for (int i = 1; i <= z; ++i) { - for (int t = 0; t <= 500; ++t) { - if (time[i][t] == (1 << b) - 1) - return cout << i << " " << t << ende, 0; - - for (int j = 0; j < b; ++j) - if (time[i][t] & (1 << j)) { - if (a[i][j] == -1) - a[i][j] = t; - else if (m[i][j] == -1) - m[i][j] = t - a[i][j]; + + for (int i = 1; i <= z; ++i) { + for (int t = 0; t <= 500; ++t) { + if (time[i][t] == (1 << b) - 1) + return cout << i << " " << t << ende, 0; + + for (int j = 0; j < b; ++j) + if (time[i][t] & (1 << j)) { + if (a[i][j] == -1) + a[i][j] = t; + else if (m[i][j] == -1) + m[i][j] = t - a[i][j]; + } } } - } - - ll zoo = 0; - ll ans = llinf*2; - for (int i = 1; i <= z; ++i) { - bool poss = true; - for (int j = 0; j < b; ++j) - if (a[i][j] == -1 || m[i][j] == -1) { - poss = false; - break; - } - - if (!poss) - continue; - - ll res = crt(a[i], m[i]); - if (res == -1) - continue; - else { - if (ans > res && res > 0) - zoo = i, ans = res; + + ll zoo = 0; + ll ans = llinf*2; + for (int i = 1; i <= z; ++i) { + bool poss = true; + for (int j = 0; j < b; ++j) + if (a[i][j] == -1 || m[i][j] == -1) { + poss = false; + break; + } + + if (!poss) + continue; + + ll res = crt(a[i], m[i]); + if (res == -1) + continue; + else { + if (ans > res && res > 0) + zoo = i, ans = res; + } } - } - if (ans == llinf*2) cout << "*" << ende; - else cout << zoo << " " << ans << ende; - return 0; + if (ans == llinf*2) cout << "*" << ende; + else cout << zoo << " " << ans << ende; + return 0; } diff --git a/contests/ICPC_LA18/H.cpp b/contests/ICPC_LA18/H.cpp index 80d3361..c639b9f 100644 --- a/contests/ICPC_LA18/H.cpp +++ b/contests/ICPC_LA18/H.cpp @@ -23,75 +23,75 @@ using ii = pair<ll,ll>; using iii = pair<ll,ii>; ii operator+(const ii &a, const ii &b) { - return ii(a.fi + b.fi, a.se + b.se); + return ii(a.fi + b.fi, a.se + b.se); } struct Dijkstra { - int N; - vector<ll> dist; - vector<int> cont; - vector<vector<iii>> graph; - - Dijkstra(int N) : - N(N), dist(N, llinf), cont(N, 0), graph(N) - {} - - ll run(int s) { - set<iii> pq; - - ll ans = 0; - dist[s] = 0; - pq.insert(iii(0, ii(s, 0))); - - while (pq.size() != 0) { - iii top = *(pq.begin()); - pq.erase(pq.begin()); - - int u = top.se.fi; - if (cont[u]) - continue; - - cont[u] = 1; - ans += top.se.se; - - for (auto i : graph[u]) { - int v = i.fi; - ll wt = i.se.fi; - - if (!cont[v] && dist[v] >= top.fi + wt) { - dist[v] = top.fi + wt; - pq.insert(iii(dist[v], ii(v, i.se.se))); + int N; + vector<ll> dist; + vector<int> cont; + vector<vector<iii>> graph; + + Dijkstra(int N) : + N(N), dist(N, llinf), cont(N, 0), graph(N) + {} + + ll run(int s) { + set<iii> pq; + + ll ans = 0; + dist[s] = 0; + pq.insert(iii(0, ii(s, 0))); + + while (pq.size() != 0) { + iii top = *(pq.begin()); + pq.erase(pq.begin()); + + int u = top.se.fi; + if (cont[u]) + continue; + + cont[u] = 1; + ans += top.se.se; + + for (auto i : graph[u]) { + int v = i.fi; + ll wt = i.se.fi; + + if (!cont[v] && dist[v] >= top.fi + wt) { + dist[v] = top.fi + wt; + pq.insert(iii(dist[v], ii(v, i.se.se))); + } + } } - } - } - return ans; - } + return ans; + } }; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n, m; cin >> n >> m; - Dijkstra d(n+2); - map<ii,ii> M; - for (int i = 0; i < m; ++i) { - int a, b; ll l, c; - cin >> a >> b >> l >> c; - if (M.find(ii(a, b)) != M.end()) { - M[ii(a, b)] = min(M[ii(a, b)], ii(l, c)); - M[ii(b, a)] = M[ii(a, b)]; - } else { - M[ii(a, b)] = {l, c}; - M[ii(b, a)] = {l, c}; + ios::sync_with_stdio(0); + cin.tie(0); + + int n, m; cin >> n >> m; + Dijkstra d(n+2); + map<ii,ii> M; + for (int i = 0; i < m; ++i) { + int a, b; ll l, c; + cin >> a >> b >> l >> c; + if (M.find(ii(a, b)) != M.end()) { + M[ii(a, b)] = min(M[ii(a, b)], ii(l, c)); + M[ii(b, a)] = M[ii(a, b)]; + } else { + M[ii(a, b)] = {l, c}; + M[ii(b, a)] = {l, c}; + } } - } - for (auto i : M) - d.graph[i.fi.fi].pb({i.fi.se, i.se}); + for (auto i : M) + d.graph[i.fi.fi].pb({i.fi.se, i.se}); - ll ans = d.run(1); - cout << ans << ende; - return 0; + ll ans = d.run(1); + cout << ans << ende; + return 0; } diff --git a/contests/ICPC_LA18/I.cpp b/contests/ICPC_LA18/I.cpp index 408da3c..6f5e50e 100644 --- a/contests/ICPC_LA18/I.cpp +++ b/contests/ICPC_LA18/I.cpp @@ -26,40 +26,40 @@ int par[MAX], deg[MAX], lev[MAX]; vector<int> graph[MAX]; void dfs(int x, int l) { - lev[x] = l; - for (auto i : graph[x]) - dfs(i, l + 1); + lev[x] = l; + for (auto i : graph[x]) + dfs(i, l + 1); } int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - int n; cin >> n; - for (int i = 2; i <= n; ++i) { - int x; cin >> par[i]; - deg[par[i]]++; - graph[par[i]].pb(i); - } + int n; cin >> n; + for (int i = 2; i <= n; ++i) { + int x; cin >> par[i]; + deg[par[i]]++; + graph[par[i]].pb(i); + } + + dfs(1, 0); + set<ii> S; + for (int i = 2; i <= n; ++i) + S.insert(ii(-lev[i], i)); - dfs(1, 0); - set<ii> S; - for (int i = 2; i <= n; ++i) - S.insert(ii(-lev[i], i)); - - int ans = 0; - while (S.size() > 0) { - ii curr = *S.begin(); - S.erase(S.begin()); + int ans = 0; + while (S.size() > 0) { + ii curr = *S.begin(); + S.erase(S.begin()); - if (deg[curr.se] >= 2 && deg[par[curr.se]] >= 3 && par[curr.se] != 1 && - S.find(ii(-lev[par[curr.se]], par[curr.se])) != S.end()) { - S.erase(ii(-lev[par[curr.se]], par[curr.se])); - deg[par[par[curr.se]]]--; - ans++; + if (deg[curr.se] >= 2 && deg[par[curr.se]] >= 3 && par[curr.se] != 1 && + S.find(ii(-lev[par[curr.se]], par[curr.se])) != S.end()) { + S.erase(ii(-lev[par[curr.se]], par[curr.se])); + deg[par[par[curr.se]]]--; + ans++; + } } - } - cout << ans << ende; - return 0; + cout << ans << ende; + return 0; } diff --git a/contests/ICPC_LA18/L.cpp b/contests/ICPC_LA18/L.cpp index 8f2c5c1..736ba34 100644 --- a/contests/ICPC_LA18/L.cpp +++ b/contests/ICPC_LA18/L.cpp @@ -24,19 +24,19 @@ using ii = pair<int,int>; using iii = pair<ii,int>; vector<int> sieve(int n) { - vector<int> primes; - vector<bool> is_prime(n+1, true); + vector<int> primes; + vector<bool> is_prime(n+1, true); - for (int p = 2; p*p <= n; ++p) - if (is_prime[p]) - for (int i = p*p; i <= n; i += p) - is_prime[i] = false; + for (int p = 2; p*p <= n; ++p) + if (is_prime[p]) + for (int i = p*p; i <= n; i += p) + is_prime[i] = false; - for (int p = 2; p <= n; ++p) - if (is_prime[p]) - primes.pb(p); + for (int p = 2; p <= n; ++p) + if (is_prime[p]) + primes.pb(p); - return primes; + return primes; } int N; @@ -47,78 +47,78 @@ int tree[4 * MAX]; #define right(x) ((x << 1) + 1) void build(int node = 1, int a = 0, int b = N - 1) { - if (a > b) - return; + if (a > b) + return; - if (a == b) { - tree[node] = v[a]; - return; - } + if (a == b) { + tree[node] = v[a]; + return; + } - build(left(node), a, (a + b) / 2); - build(right(node), 1 + (a + b) / 2, b); - tree[node] = tree[node * 2] + tree[node * 2 + 1]; + build(left(node), a, (a + b) / 2); + build(right(node), 1 + (a + b) / 2, b); + tree[node] = tree[node * 2] + tree[node * 2 + 1]; } void update(int idx, int val, int node = 1, int a = 0, int b = N - 1) { - if (a > b || a > idx || b < idx) - return; + if (a > b || a > idx || b < idx) + return; - if (a == b) { - tree[node] += val; - return; - } + if (a == b) { + tree[node] += val; + return; + } - update(idx, val, left(node), a, (a + b) / 2); - update(idx, val, right(node), 1 + (a + b) / 2, b); - tree[node] = tree[node * 2] + tree[node * 2 + 1]; + update(idx, val, left(node), a, (a + b) / 2); + update(idx, val, right(node), 1 + (a + b) / 2, b); + tree[node] = tree[node * 2] + tree[node * 2 + 1]; } int query(int i, int j, int node = 1, int a = 0, int b = N - 1) { - if (a > b || a > j || b < i) - return 0; + if (a > b || a > j || b < i) + return 0; - if (i <= a && b <= j) - return tree[node]; + if (i <= a && b <= j) + return tree[node]; - int q1 = query(i, j, left(node), a, (a + b) / 2); - int q2 = query(i, j, right(node), 1 + (a + b) / 2, b); - return q1 + q2; + int q1 = query(i, j, left(node), a, (a + b) / 2); + int q2 = query(i, j, right(node), 1 + (a + b) / 2, b); + return q1 + q2; } int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - vector<int> primes = sieve(100000); - - int q; cin >> q; - vector<iii> que(q); - for (int i = 0; i < q; ++i) { - int n, k; cin >> n >> k; - que[i] = {ii(k, n), i}; - } - - N = 100001; - fill(v, v+N, 1); - build(); - - vector<int> ans(q); - int curr = primes.size() - 1; - sort(rall(que)); - for (auto i : que) { - while (curr >= 0 && primes[curr] > i.fi.fi) { - for (int j = primes[curr]; j <= N; j += primes[curr]) - if (query(j, j) != 0) - update(j, -1); - - curr--; + ios::sync_with_stdio(0); + cin.tie(0); + + vector<int> primes = sieve(100000); + + int q; cin >> q; + vector<iii> que(q); + for (int i = 0; i < q; ++i) { + int n, k; cin >> n >> k; + que[i] = {ii(k, n), i}; } - ans[i.se] = query(2, i.fi.se); - } + N = 100001; + fill(v, v+N, 1); + build(); - for (int i = 0; i < q; ++i) - cout << ans[i] << ende; - return 0; + vector<int> ans(q); + int curr = primes.size() - 1; + sort(rall(que)); + for (auto i : que) { + while (curr >= 0 && primes[curr] > i.fi.fi) { + for (int j = primes[curr]; j <= N; j += primes[curr]) + if (query(j, j) != 0) + update(j, -1); + + curr--; + } + + ans[i.se] = query(2, i.fi.se); + } + + for (int i = 0; i < q; ++i) + cout << ans[i] << ende; + return 0; } diff --git a/contests/ICPC_LA18/M.cpp b/contests/ICPC_LA18/M.cpp index cf7e018..f732f42 100644 --- a/contests/ICPC_LA18/M.cpp +++ b/contests/ICPC_LA18/M.cpp @@ -22,18 +22,18 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n; cin >> n; - int past = 0, ans = 0; - for (int i = 0; i < n; ++i) { - int x; cin >> x; - if (x > past) - ans++; - past = x; - } - - cout << ans << ende; - return 0; + ios::sync_with_stdio(0); + cin.tie(0); + + int n; cin >> n; + int past = 0, ans = 0; + for (int i = 0; i < n; ++i) { + int x; cin >> x; + if (x > past) + ans++; + past = x; + } + + cout << ans << ende; + return 0; } diff --git a/contests/ICPC_LA19/E.cpp b/contests/ICPC_LA19/E.cpp index 70612c0..a418e43 100644 --- a/contests/ICPC_LA19/E.cpp +++ b/contests/ICPC_LA19/E.cpp @@ -22,22 +22,22 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - string s; cin >> s; s += s; - int x; cin >> x; - int n = s.size(); + string s; cin >> s; s += s; + int x; cin >> x; + int n = s.size(); - vector<int> last(n); - last[n-1] = (s[n-1] == 'E') ? n - 1 : inf; - for (int i = n - 2; i >= 0; --i) - last[i] = (s[i] == 'E') ? i : last[i+1]; + vector<int> last(n); + last[n-1] = (s[n-1] == 'E') ? n - 1 : inf; + for (int i = n - 2; i >= 0; --i) + last[i] = (s[i] == 'E') ? i : last[i+1]; - ll ans = 0LL; - for (int i = 0; i < n/2; ++i) - ans += max(0, x - (last[i] - i)); + ll ans = 0LL; + for (int i = 0; i < n/2; ++i) + ans += max(0, x - (last[i] - i)); - cout << ans << ende; - return 0; + cout << ans << ende; + return 0; } diff --git a/contests/ICPC_LA19/I.cpp b/contests/ICPC_LA19/I.cpp index b493ad4..c3c1aa4 100644 --- a/contests/ICPC_LA19/I.cpp +++ b/contests/ICPC_LA19/I.cpp @@ -25,31 +25,31 @@ int dp[2010], foi[2010]; vector<int> graph[2010]; ll solve(int x, int l) { - if (x >= l) return foi[x] = 1; - if (dp[x] != -1) return dp[x]; + if (x >= l) return foi[x] = 1; + if (dp[x] != -1) return dp[x]; - ll ans = 0; - for (auto i : graph[x]) - ans = (ans + solve(i, l)) % MOD; - return dp[x] = ans; + ll ans = 0; + for (auto i : graph[x]) + ans = (ans + solve(i, l)) % MOD; + return dp[x] = ans; } int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n, l; cin >> n >> l; - for (int i = 0; i < l; ++i) { - int k; cin >> k; - for (int j = 0; j < k; ++j) { - int x; cin >> x; x--; - graph[i].pb(x); + ios::sync_with_stdio(0); + cin.tie(0); + + int n, l; cin >> n >> l; + for (int i = 0; i < l; ++i) { + int k; cin >> k; + for (int j = 0; j < k; ++j) { + int x; cin >> x; x--; + graph[i].pb(x); + } } - } - mset(dp, -1); - ll b = solve(0, l); - ll a = accumulate(foi + l, foi + 2010, 0); - cout << b << " " << a << ende; - return 0; + mset(dp, -1); + ll b = solve(0, l); + ll a = accumulate(foi + l, foi + 2010, 0); + cout << b << " " << a << ende; + return 0; } diff --git a/contests/ICPC_LA19/K.cpp b/contests/ICPC_LA19/K.cpp index 5f3f19a..087ece4 100644 --- a/contests/ICPC_LA19/K.cpp +++ b/contests/ICPC_LA19/K.cpp @@ -22,42 +22,42 @@ using ll = long long; using ii = pair<ll,ll>; void mult(vector<ll> &ans, vector<ll> a, ii b) { - ans.resize(a.size() + 2); - fill(all(ans), 0); - for (int i = 0; i < a.size(); ++i) { - ans[i+0] += a[i] * b.fi; - ans[i+1] += a[i] * b.se; - } + ans.resize(a.size() + 2); + fill(all(ans), 0); + for (int i = 0; i < a.size(); ++i) { + ans[i+0] += a[i] * b.fi; + ans[i+1] += a[i] * b.se; + } } int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - string s; cin >> s; - vector<ii> v; - for (int i = 1; i < s.size(); ++i) - if (s[i] != s[i-1]) - v.pb({1, -(2*i + 1)}); - - if (v.size() == 0) { - cout << 0 << ende; - return cout << ((s[0] == 'A') ? -1 : 1) << ende, 0; - } - - vector<ll> ans = {v[0].fi, v[0].se}; - for (int i = 1; i < v.size(); ++i) - mult(ans, ans, v[i]); - - ll mul = 1LL; - if ((v.size() % 2 && s[0] == 'H') || (v.size() % 2 == 0 && s[0] == 'A')) - mul *= -1LL; - - cout << v.size() << ende; - for (int i = 0; i <= v.size(); ++i) { - if (i) cout << " "; - cout << ans[i] * mul; - } - cout << ende; - return 0; + ios::sync_with_stdio(0); + cin.tie(0); + + string s; cin >> s; + vector<ii> v; + for (int i = 1; i < s.size(); ++i) + if (s[i] != s[i-1]) + v.pb({1, -(2*i + 1)}); + + if (v.size() == 0) { + cout << 0 << ende; + return cout << ((s[0] == 'A') ? -1 : 1) << ende, 0; + } + + vector<ll> ans = {v[0].fi, v[0].se}; + for (int i = 1; i < v.size(); ++i) + mult(ans, ans, v[i]); + + ll mul = 1LL; + if ((v.size() % 2 && s[0] == 'H') || (v.size() % 2 == 0 && s[0] == 'A')) + mul *= -1LL; + + cout << v.size() << ende; + for (int i = 0; i <= v.size(); ++i) { + if (i) cout << " "; + cout << ans[i] * mul; + } + cout << ende; + return 0; } diff --git a/contests/ICPC_LA19/L.cpp b/contests/ICPC_LA19/L.cpp index 4ba4a20..029c358 100644 --- a/contests/ICPC_LA19/L.cpp +++ b/contests/ICPC_LA19/L.cpp @@ -25,42 +25,42 @@ int mat[1010][1010]; int sum[1010][1010]; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n, m; cin >> n >> m; - vector<string> v(n); - for (auto &i : v) cin >> i; - - for (int i = 0; i < n; ++i) - for (int j = 1; j < m; ++j) - mat[i][j-1] = (v[i][j] == v[i][j-1]); - - for (int i = 1; i < m; ++i) - sum[1][i] = mat[0][i-1]; - - for (int i = 2; i <= n; ++i) - for (int j = 1; j < m; ++j) - sum[i][j] = mat[i-1][j-1] + sum[i-1][j]; - - for (int i = 1; i <= n; ++i) - for (int j = 2; j < m; ++j) - sum[i][j] += sum[i][j-1]; - - auto query = [&](int i0, int j0, int i1, int j1) { - return sum[i1][j1] - sum[i0-1][j1] - sum[i1][j0-1] + sum[i0-1][j0-1]; - }; - - int ans = 1; - for (int i = 1; i <= n; ++i) - for (int j = 1; j < m; ++j) { - int k = 1; - for (int b = min(n, m) + 1; b > 0; b /= 2) - while (i+k+b-1 <= n && i+k+b-2 <= m && query(i, j, i+b+k-1, j+b+k-2) == (k+b)*(k+b-1)) - k += b; - ans = max(ans, k*k); - } - - cout << ans << ende; - return 0; + ios::sync_with_stdio(0); + cin.tie(0); + + int n, m; cin >> n >> m; + vector<string> v(n); + for (auto &i : v) cin >> i; + + for (int i = 0; i < n; ++i) + for (int j = 1; j < m; ++j) + mat[i][j-1] = (v[i][j] == v[i][j-1]); + + for (int i = 1; i < m; ++i) + sum[1][i] = mat[0][i-1]; + + for (int i = 2; i <= n; ++i) + for (int j = 1; j < m; ++j) + sum[i][j] = mat[i-1][j-1] + sum[i-1][j]; + + for (int i = 1; i <= n; ++i) + for (int j = 2; j < m; ++j) + sum[i][j] += sum[i][j-1]; + + auto query = [&](int i0, int j0, int i1, int j1) { + return sum[i1][j1] - sum[i0-1][j1] - sum[i1][j0-1] + sum[i0-1][j0-1]; + }; + + int ans = 1; + for (int i = 1; i <= n; ++i) + for (int j = 1; j < m; ++j) { + int k = 1; + for (int b = min(n, m) + 1; b > 0; b /= 2) + while (i+k+b-1 <= n && i+k+b-2 <= m && query(i, j, i+b+k-1, j+b+k-2) == (k+b)*(k+b-1)) + k += b; + ans = max(ans, k*k); + } + + cout << ans << ende; + return 0; } diff --git a/contests/ICPC_LA19/M.cpp b/contests/ICPC_LA19/M.cpp index e5fb844..e7ef23c 100644 --- a/contests/ICPC_LA19/M.cpp +++ b/contests/ICPC_LA19/M.cpp @@ -22,24 +22,24 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n, x; cin >> n >> x; - vector<int> v(n); - for (auto &i : v) cin >> i; - - int ans = 0; - for (int i = 0; i < n; ++i) { - int cnt = 1; - for (int j = i+1; j < n; ++j) - if (v[j] - v[j-1] <= x) - cnt++; - else - break; - ans = max(ans, cnt); - } - - cout << ans << ende; - return 0; + ios::sync_with_stdio(0); + cin.tie(0); + + int n, x; cin >> n >> x; + vector<int> v(n); + for (auto &i : v) cin >> i; + + int ans = 0; + for (int i = 0; i < n; ++i) { + int cnt = 1; + for (int j = i+1; j < n; ++j) + if (v[j] - v[j-1] <= x) + cnt++; + else + break; + ans = max(ans, cnt); + } + + cout << ans << ende; + return 0; } diff --git a/contests/SBC14/A.cpp b/contests/SBC14/A.cpp index 159d22c..293f3db 100644 --- a/contests/SBC14/A.cpp +++ b/contests/SBC14/A.cpp @@ -20,10 +20,10 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - int x, y; cin >> x >> y; - cout << ((y - 1) / (y - x)) + 1 << ende; - return 0; + int x, y; cin >> x >> y; + cout << ((y - 1) / (y - x)) + 1 << ende; + return 0; } diff --git a/contests/SBC14/B.cpp b/contests/SBC14/B.cpp index 98e0d00..9f7d335 100644 --- a/contests/SBC14/B.cpp +++ b/contests/SBC14/B.cpp @@ -20,17 +20,17 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - ll n; cin >> n; - ll num = 2 % (n + 1); - int ans = 1; - while (true) { - if (num == 1) - return cout << ans << ende, 0; - num = (num * 2) % (n + 1); - ans++; - } - return 0; + ll n; cin >> n; + ll num = 2 % (n + 1); + int ans = 1; + while (true) { + if (num == 1) + return cout << ans << ende, 0; + num = (num * 2) % (n + 1); + ans++; + } + return 0; } diff --git a/contests/SBC14/C.cpp b/contests/SBC14/C.cpp index 57cf893..e6773de 100644 --- a/contests/SBC14/C.cpp +++ b/contests/SBC14/C.cpp @@ -22,28 +22,28 @@ using ii = pair<int,int>; struct plane { ll a, b, c, d; }; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int m, n; cin >> m >> n; - vector<plane> p(m); - for (int i = 0; i < m; ++i) { - ll a, b, c, d; cin >> a >> b >> c >> d; - p[i] = {a, b, c, d}; - } - - map<string,int> M; - for (int i = 0; i < n; ++i) { - string st; - ll a, b, c; cin >> a >> b >> c; - for (int j = 0; j < m; ++j) - st.pb((p[j].a*a + p[j].b*b + p[j].c*c > p[j].d) + '0'); - M[st] += 1; - } - - int ans = 0; - for (auto &i : M) - ans = max(ans, i.se); - cout << ans << ende; - return 0; + ios::sync_with_stdio(0); + cin.tie(0); + + int m, n; cin >> m >> n; + vector<plane> p(m); + for (int i = 0; i < m; ++i) { + ll a, b, c, d; cin >> a >> b >> c >> d; + p[i] = {a, b, c, d}; + } + + map<string,int> M; + for (int i = 0; i < n; ++i) { + string st; + ll a, b, c; cin >> a >> b >> c; + for (int j = 0; j < m; ++j) + st.pb((p[j].a*a + p[j].b*b + p[j].c*c > p[j].d) + '0'); + M[st] += 1; + } + + int ans = 0; + for (auto &i : M) + ans = max(ans, i.se); + cout << ans << ende; + return 0; } diff --git a/contests/SBC14/F.cpp b/contests/SBC14/F.cpp index af8af4a..66e4317 100644 --- a/contests/SBC14/F.cpp +++ b/contests/SBC14/F.cpp @@ -22,41 +22,41 @@ using ii = pair<int,int>; ll mat[110*110], ans[110*110], aux[110*110]; void mult(ll *a, ll *b, ll *res, int n) { - for (int i = 0; i < n; ++i) - for (int j = 0; j < n; ++j) { - aux[i*n+j] = 0; - for (int k = 0; k < n; ++k) - aux[i*n+j] = (aux[i*n+j] + a[i*n+k] * b[k*n+j]) % MOD; - } + for (int i = 0; i < n; ++i) + for (int j = 0; j < n; ++j) { + aux[i*n+j] = 0; + for (int k = 0; k < n; ++k) + aux[i*n+j] = (aux[i*n+j] + a[i*n+k] * b[k*n+j]) % MOD; + } - memcpy(res, aux, sizeof aux); + memcpy(res, aux, sizeof aux); } void bin_exp(ll e, int n) { - mset(ans, 0); - for (int i = 0; i < n; ++i) - ans[i*n+i] = 1; - - while (e) { - if (e & 1) mult(ans, mat, ans, n); - e >>= 1; - mult(mat, mat, mat, n); - } + mset(ans, 0); + for (int i = 0; i < n; ++i) + ans[i*n+i] = 1; + + while (e) { + if (e & 1) mult(ans, mat, ans, n); + e >>= 1; + mult(mat, mat, mat, n); + } } int main() { - int n; ll l; - while (scanf("%d %lld", &n, &l) != EOF) { - int s, t, x; cin >> s >> t; s--, t--; - mset(mat, 0); - for (int i = 0; i < n; ++i) - for (int j = 0; j < 4; ++j) { - scanf("%d", &x); x--; - mat[i*n+x]++; - } - - bin_exp(l, n); - printf("%lld\n", ans[s*n + t] % MOD); - } - return 0; + int n; ll l; + while (scanf("%d %lld", &n, &l) != EOF) { + int s, t, x; cin >> s >> t; s--, t--; + mset(mat, 0); + for (int i = 0; i < n; ++i) + for (int j = 0; j < 4; ++j) { + scanf("%d", &x); x--; + mat[i*n+x]++; + } + + bin_exp(l, n); + printf("%lld\n", ans[s*n + t] % MOD); + } + return 0; } diff --git a/contests/SBC14/G.cpp b/contests/SBC14/G.cpp index b38b7ba..33c03d2 100644 --- a/contests/SBC14/G.cpp +++ b/contests/SBC14/G.cpp @@ -21,64 +21,64 @@ using ii = pair<int,int>; using pii = pair<ii,ii>; struct elem { - int x, y, l, u, d; + int x, y, l, u, d; }; ii get(char x) { - if (x >= 'a' && x <= 'j') - return {1 << (x - 'a'), 0}; - return {0, 1 << (x - 'A')}; + if (x >= 'a' && x <= 'j') + return {1 << (x - 'a'), 0}; + return {0, 1 << (x - 'A')}; } map<pii,int> foi; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - vector<int> dx = {-1, 1, 0, 0}; - vector<int> dy = {0, 0, 1, -1}; - - int n; cin >> n; - vector<string> v(n); - for (auto &i : v) - cin >> i; - - queue<elem> Q; - ii val = get(v[0][0]); - Q.push({0, 0, val.fi, val.se, 1}); - foi[pii(ii(0,0),ii(val.fi,val.fi))] = 1; - int ans = inf; - - while (!Q.empty()) { - elem u = Q.front(); Q.pop(); - if (u.x == n - 1 && u.y == n - 1) - ans = min(ans, u.d); - - for (int i = 0; i < 4; ++i) { - int x = u.x + dx[i]; - int y = u.y + dy[i]; - - if (x >= 0 && x < n && y >= 0 && y < n) { - val = get(v[x][y]); - if (val.fi) { - if (!(u.u & val.fi)) - if (!foi[pii(ii(x,y),ii(val.fi|u.l,u.u))]) { - Q.push({x, y, val.fi | u.l, u.u, u.d + 1}); - foi[pii(ii(x,y),ii(val.fi|u.l,u.u))] = 1; - } - } else { - if (!(u.l & val.se)) - if (!foi[pii(ii(x,y),ii(u.l,val.se | u.u))]) { - Q.push({x, y, u.l, val.se | u.u, u.d + 1}); - foi[pii(ii(x,y),ii(u.l,val.se|u.u))] = 1; + ios::sync_with_stdio(0); + cin.tie(0); + + vector<int> dx = {-1, 1, 0, 0}; + vector<int> dy = {0, 0, 1, -1}; + + int n; cin >> n; + vector<string> v(n); + for (auto &i : v) + cin >> i; + + queue<elem> Q; + ii val = get(v[0][0]); + Q.push({0, 0, val.fi, val.se, 1}); + foi[pii(ii(0,0),ii(val.fi,val.fi))] = 1; + int ans = inf; + + while (!Q.empty()) { + elem u = Q.front(); Q.pop(); + if (u.x == n - 1 && u.y == n - 1) + ans = min(ans, u.d); + + for (int i = 0; i < 4; ++i) { + int x = u.x + dx[i]; + int y = u.y + dy[i]; + + if (x >= 0 && x < n && y >= 0 && y < n) { + val = get(v[x][y]); + if (val.fi) { + if (!(u.u & val.fi)) + if (!foi[pii(ii(x,y),ii(val.fi|u.l,u.u))]) { + Q.push({x, y, val.fi | u.l, u.u, u.d + 1}); + foi[pii(ii(x,y),ii(val.fi|u.l,u.u))] = 1; + } + } else { + if (!(u.l & val.se)) + if (!foi[pii(ii(x,y),ii(u.l,val.se | u.u))]) { + Q.push({x, y, u.l, val.se | u.u, u.d + 1}); + foi[pii(ii(x,y),ii(u.l,val.se|u.u))] = 1; + } + } } } - } } - } - if (ans == inf) cout << -1 << ende; - else cout << ans << ende; - return 0; + if (ans == inf) cout << -1 << ende; + else cout << ans << ende; + return 0; } diff --git a/contests/SBC14/H.cpp b/contests/SBC14/H.cpp index 6972a43..925e1ef 100644 --- a/contests/SBC14/H.cpp +++ b/contests/SBC14/H.cpp @@ -20,21 +20,21 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int ans = 0; - int n, m; cin >> n >> m; - for (int i = 0; i < n; ++i) { - int cnt = 0; - for (int j = 0; j < m; ++j) { - int x; cin >> x; - cnt += (x != 0); + ios::sync_with_stdio(0); + cin.tie(0); + + int ans = 0; + int n, m; cin >> n >> m; + for (int i = 0; i < n; ++i) { + int cnt = 0; + for (int j = 0; j < m; ++j) { + int x; cin >> x; + cnt += (x != 0); + } + if (cnt == m) + ans++; } - if (cnt == m) - ans++; - } - cout << ans << ende; - return 0; + cout << ans << ende; + return 0; } diff --git a/contests/SBC14/I.cpp b/contests/SBC14/I.cpp index bbc0aff..5781eaf 100644 --- a/contests/SBC14/I.cpp +++ b/contests/SBC14/I.cpp @@ -20,70 +20,70 @@ using ll = long long; using ii = pair<int,int>; vector<int> sieve(int n) { - vector<int> primes; - vector<int> is_prime(n + 1, 1); + vector<int> primes; + vector<int> is_prime(n + 1, 1); - for (int p = 2; p*p <= n; ++p) - if (is_prime[p]) - for (int i = p*p; i <= n; i += p) - is_prime[i] = false; + for (int p = 2; p*p <= n; ++p) + if (is_prime[p]) + for (int i = p*p; i <= n; i += p) + is_prime[i] = false; - for (int p = 2; p <= n; ++p) - if (is_prime[p]) - primes.pb(p); + for (int p = 2; p <= n; ++p) + if (is_prime[p]) + primes.pb(p); - return primes; + return primes; } struct ans_t { ll x, y, d; }; ans_t ext_gcd(ll a, ll b) { - if (a == 0) return {0, 1, b}; - ans_t e = ext_gcd(b % a, a); - return {e.y - (b/a)*e.x, e.x, e.d}; + if (a == 0) return {0, 1, b}; + ans_t e = ext_gcd(b % a, a); + return {e.y - (b/a)*e.x, e.x, e.d}; } int extended_euclidean(int a, int m) { - ans_t g = ext_gcd(a, m); - return (g.x % m + m) % m; + ans_t g = ext_gcd(a, m); + return (g.x % m + m) % m; } ll bin_exp(ll a, ll e, ll M = MOD) { - ll x = 1; - while (e) { - if (e & 1) x = (x * a) % M; - e >>= 1; - a = (a * a) % M; - } - return x % M; + ll x = 1; + while (e) { + if (e & 1) x = (x * a) % M; + e >>= 1; + a = (a * a) % M; + } + return x % M; } int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); + + ll n, e, c; cin >> n >> e >> c; + vector<int> primes = sieve((int) sqrt(n)+1); - ll n, e, c; cin >> n >> e >> c; - vector<int> primes = sieve((int) sqrt(n)+1); - - for (int i = 0; i < primes.size() && primes[i]*primes[i] <= n; ++i) { - if (n % primes[i] == 0) { - ll p = primes[i]; - ll q = n / p; + for (int i = 0; i < primes.size() && primes[i]*primes[i] <= n; ++i) { + if (n % primes[i] == 0) { + ll p = primes[i]; + ll q = n / p; - if (p % 2 == 0 || q % 2 == 0) - continue; + if (p % 2 == 0 || q % 2 == 0) + continue; - ll phi = (p - 1) * (q - 1); - if (e >= phi || __gcd(phi, e) != 1) - continue; + ll phi = (p - 1) * (q - 1); + if (e >= phi || __gcd(phi, e) != 1) + continue; - ll d = extended_euclidean(e, phi); - ll m = bin_exp(c, d, n); + ll d = extended_euclidean(e, phi); + ll m = bin_exp(c, d, n); - if (bin_exp(m, e, n) == c && m > 0) - return cout << m << ende, 0; + if (bin_exp(m, e, n) == c && m > 0) + return cout << m << ende, 0; + } } - } - return 0; + return 0; } diff --git a/contests/SBC14/K.cpp b/contests/SBC14/K.cpp index 007b9e7..dda4810 100644 --- a/contests/SBC14/K.cpp +++ b/contests/SBC14/K.cpp @@ -20,49 +20,49 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - double c; - int n; cin >> c >> n; + double c; + int n; cin >> c >> n; - vector<double> v(n); - for (auto &i : v) cin >> i; + vector<double> v(n); + for (auto &i : v) cin >> i; - double l = v[0] + EPS, r = v[1]; - for (int i = 0; i < 30; ++i) { - double m = (l + r) / 2.0; - double cc = m + (c / n); + double l = v[0] + EPS, r = v[1]; + for (int i = 0; i < 30; ++i) { + double m = (l + r) / 2.0; + double cc = m + (c / n); - int k = 1; - int whi = 0; - for (int j = 1; j < n; j = k) { - while (k < n && v[k] < cc) k++; - if (k == n) - if (v[0] + c < cc) - k++; + int k = 1; + int whi = 0; + for (int j = 1; j < n; j = k) { + while (k < n && v[k] < cc) k++; + if (k == n) + if (v[0] + c < cc) + k++; - if (k - j > 1) { - whi = 1; - break; - } + if (k - j > 1) { + whi = 1; + break; + } - if (k - j == 0) { - whi = 2; - break; - } + if (k - j == 0) { + whi = 2; + break; + } - cc += (c / n); - } + cc += (c / n); + } - if (whi == 0) { - return cout << "S" << ende, 0; - } else if (whi == 1) - r = m; - else - l = m; - } + if (whi == 0) { + return cout << "S" << ende, 0; + } else if (whi == 1) + r = m; + else + l = m; + } - cout << "N" << ende; - return 0; + cout << "N" << ende; + return 0; } diff --git a/contests/SBC15/A.cpp b/contests/SBC15/A.cpp index 0c1b582..ec67d1d 100644 --- a/contests/SBC15/A.cpp +++ b/contests/SBC15/A.cpp @@ -26,42 +26,42 @@ vector<ii> graph[MAX]; vector<ii> gg[MAX]; int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - int c, v; cin >> c >> v; - for (int i = 0; i < v; ++i) { - int a, b, w; cin >> a >> b >> w; - graph[a].pb({b, w}); - graph[b].pb({a, w}); - } + int c, v; cin >> c >> v; + for (int i = 0; i < v; ++i) { + int a, b, w; cin >> a >> b >> w; + graph[a].pb({b, w}); + graph[b].pb({a, w}); + } - for (int i = 1; i <= c; ++i) - for (auto j : graph[i]) - for (auto k : graph[j.fi]) - gg[i].pb({k.fi, j.se + k.se}); + for (int i = 1; i <= c; ++i) + for (auto j : graph[i]) + for (auto k : graph[j.fi]) + gg[i].pb({k.fi, j.se + k.se}); - vector<int> vis(c + 1, 0); - vector<int> dist(c + 1, inf); + vector<int> vis(c + 1, 0); + vector<int> dist(c + 1, inf); - set<ii> pq; - pq.insert({0, 1}); - dist[1] = 0; - while (!pq.empty()) { - int u = pq.begin()->se; - pq.erase(pq.begin()); + set<ii> pq; + pq.insert({0, 1}); + dist[1] = 0; + while (!pq.empty()) { + int u = pq.begin()->se; + pq.erase(pq.begin()); - if (vis[u]) continue; - vis[u] = 1; + if (vis[u]) continue; + vis[u] = 1; - for (auto i : gg[u]) - if (!vis[i.fi] && dist[i.fi] > dist[u] + i.se) { - dist[i.fi] = dist[u] + i.se; - pq.insert({dist[i.fi], i.fi}); - } - } + for (auto i : gg[u]) + if (!vis[i.fi] && dist[i.fi] > dist[u] + i.se) { + dist[i.fi] = dist[u] + i.se; + pq.insert({dist[i.fi], i.fi}); + } + } - if (dist[c] == inf) dist[c] = -1; - cout << dist[c] << ende; - return 0; + if (dist[c] == inf) dist[c] = -1; + cout << dist[c] << ende; + return 0; } diff --git a/contests/SBC15/B.cpp b/contests/SBC15/B.cpp index 417f7b0..308acee 100644 --- a/contests/SBC15/B.cpp +++ b/contests/SBC15/B.cpp @@ -22,21 +22,21 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - int n, c; cin >> n >> c; - vector<int> v(n); - vector<vector<int>> dp(n, vector<int>(2)); + int n, c; cin >> n >> c; + vector<int> v(n); + vector<vector<int>> dp(n, vector<int>(2)); - for (auto &i : v) cin >> i; + for (auto &i : v) cin >> i; - dp[n-1] = {0, v[n-1]}; - for (int i = n - 2; i >= 0; --i) { - dp[i][1] = max(dp[i + 1][0] + v[i], dp[i + 1][1]); - dp[i][0] = max(dp[i + 1][0], dp[i + 1][1] - (v[i] + c)); - } + dp[n-1] = {0, v[n-1]}; + for (int i = n - 2; i >= 0; --i) { + dp[i][1] = max(dp[i + 1][0] + v[i], dp[i + 1][1]); + dp[i][0] = max(dp[i + 1][0], dp[i + 1][1] - (v[i] + c)); + } - cout << max(0, dp[0][0]) << ende; - return 0; + cout << max(0, dp[0][0]) << ende; + return 0; } diff --git a/contests/SBC15/C.cpp b/contests/SBC15/C.cpp index 5edde77..e338645 100644 --- a/contests/SBC15/C.cpp +++ b/contests/SBC15/C.cpp @@ -22,11 +22,11 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - int a, b; cin >> a >> b; - cout << max(a, b) << ende; + int a, b; cin >> a >> b; + cout << max(a, b) << ende; - return 0; + return 0; } diff --git a/contests/SBC15/D.cpp b/contests/SBC15/D.cpp index b17fea0..bcdc668 100644 --- a/contests/SBC15/D.cpp +++ b/contests/SBC15/D.cpp @@ -25,70 +25,70 @@ int c[101], r[101]; string mat[101][101]; int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - int n, m; cin >> n >> m; + int n, m; cin >> n >> m; - int k = 0; - map<string,int> M; - for (int i = 0; i < n; ++i) { - for (int j = 0; j < m; ++j) { - cin >> mat[i][j]; - M[mat[i][j]] = k++; + int k = 0; + map<string,int> M; + for (int i = 0; i < n; ++i) { + for (int j = 0; j < m; ++j) { + cin >> mat[i][j]; + M[mat[i][j]] = k++; + } + cin >> c[i]; } - cin >> c[i]; - } - - for (int j = 0; j < m; ++j) - cin >> r[j]; - - map<string,int> ans; - for (int i = 0; i < M.size(); ++i) { - string found = "nono"; - - for (int j = 0; j < n; ++j) { - map<string,int> S; - for (int k = 0; k < m; ++k) - S[mat[j][k]]++; - if (S.find("aaa") != S.end()) - S.erase("aaa"); + for (int j = 0; j < m; ++j) + cin >> r[j]; - if (S.size() == 1) { - found = S.begin()->fi; - ans[S.begin()->fi] = c[j] / S.begin()->se; - break; - } - } + map<string,int> ans; + for (int i = 0; i < M.size(); ++i) { + string found = "nono"; - if (found == "nono") { - for (int j = 0; j < m; ++j) { - map<string,int> S; - for (int k = 0; k < n; ++k) - S[mat[k][j]]++; + for (int j = 0; j < n; ++j) { + map<string,int> S; + for (int k = 0; k < m; ++k) + S[mat[j][k]]++; - if (S.find("aaa") != S.end()) - S.erase("aaa"); + if (S.find("aaa") != S.end()) + S.erase("aaa"); - if (S.size() == 1) { - found = S.begin()->fi; - ans[S.begin()->fi] = r[j] / S.begin()->se; - break; + if (S.size() == 1) { + found = S.begin()->fi; + ans[S.begin()->fi] = c[j] / S.begin()->se; + break; + } } - } - } - for (int j = 0; j < n; ++j) - for (int k = 0; k < m; ++k) - if (mat[j][k] == found) { - r[k] -= ans[found]; - c[j] -= ans[found]; - mat[j][k] = "aaa"; + if (found == "nono") { + for (int j = 0; j < m; ++j) { + map<string,int> S; + for (int k = 0; k < n; ++k) + S[mat[k][j]]++; + + if (S.find("aaa") != S.end()) + S.erase("aaa"); + + if (S.size() == 1) { + found = S.begin()->fi; + ans[S.begin()->fi] = r[j] / S.begin()->se; + break; + } + } } - } - for (auto i : ans) - cout << i.fi << " " << i.se << ende; - return 0; + for (int j = 0; j < n; ++j) + for (int k = 0; k < m; ++k) + if (mat[j][k] == found) { + r[k] -= ans[found]; + c[j] -= ans[found]; + mat[j][k] = "aaa"; + } + } + + for (auto i : ans) + cout << i.fi << " " << i.se << ende; + return 0; } diff --git a/contests/SBC15/E.cpp b/contests/SBC15/E.cpp index 6a3d117..18ad21f 100644 --- a/contests/SBC15/E.cpp +++ b/contests/SBC15/E.cpp @@ -22,33 +22,33 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - ll n, b; cin >> n >> b; - if (b <= n) - return cout << 1 << " " << b, 0; - - auto f = [&](ll x) { - ll sum = ((n - 1LL) * n); - return sum - (x * (x+1LL)); - }; - - ll k = n - 1; - for (ll bb = n / 2; bb >= 1; bb /= 2) - while (k - bb >= 0 && n + f(k - bb) <= b) - k -= bb; - - ll base = n + f(k); - if (base + k <= b) - base += k; - - ll kk = 0; - for (ll bb = n / 2; bb >= 1; bb /= 2) - while (base + kk + bb < ) - - cout << f(6) << ende; - cout << k << ende; - cout << base << ende; - return 0; + ios::sync_with_stdio(0); + cin.tie(0); + + ll n, b; cin >> n >> b; + if (b <= n) + return cout << 1 << " " << b, 0; + + auto f = [&](ll x) { + ll sum = ((n - 1LL) * n); + return sum - (x * (x+1LL)); + }; + + ll k = n - 1; + for (ll bb = n / 2; bb >= 1; bb /= 2) + while (k - bb >= 0 && n + f(k - bb) <= b) + k -= bb; + + ll base = n + f(k); + if (base + k <= b) + base += k; + + ll kk = 0; + for (ll bb = n / 2; bb >= 1; bb /= 2) + while (base + kk + bb < ) + + cout << f(6) << ende; + cout << k << ende; + cout << base << ende; + return 0; } diff --git a/contests/SBC15/F.cpp b/contests/SBC15/F.cpp index e920a79..074e009 100644 --- a/contests/SBC15/F.cpp +++ b/contests/SBC15/F.cpp @@ -22,22 +22,22 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n; cin >> n; - vector<int> fat(10); - fat[0] = 1; - for (int i = 1; i < 10; ++i) - fat[i] = fat[i-1] * i; - - int ans = 0; - for (int i = 9; i >= 1; --i) - while (n - fat[i] >= 0) { - n -= fat[i]; - ans++; - } - - cout << ans << ende; - return 0; + ios::sync_with_stdio(0); + cin.tie(0); + + int n; cin >> n; + vector<int> fat(10); + fat[0] = 1; + for (int i = 1; i < 10; ++i) + fat[i] = fat[i-1] * i; + + int ans = 0; + for (int i = 9; i >= 1; --i) + while (n - fat[i] >= 0) { + n -= fat[i]; + ans++; + } + + cout << ans << ende; + return 0; } diff --git a/contests/SBC15/J.cpp b/contests/SBC15/J.cpp index f109992..f97b912 100644 --- a/contests/SBC15/J.cpp +++ b/contests/SBC15/J.cpp @@ -22,21 +22,21 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int j, r; cin >> j >> r; - vector<int> p(j, 0); - for (int i = 0; i < j*r; ++i) { - int x; cin >> x; - p[i%j] += x; - } - - int ans = 0; - for (int i = 0; i < j; ++i) - if (p[ans] <= p[i]) - ans = i; - - cout << ans + 1 << ende; - return 0; + ios::sync_with_stdio(0); + cin.tie(0); + + int j, r; cin >> j >> r; + vector<int> p(j, 0); + for (int i = 0; i < j*r; ++i) { + int x; cin >> x; + p[i%j] += x; + } + + int ans = 0; + for (int i = 0; i < j; ++i) + if (p[ans] <= p[i]) + ans = i; + + cout << ans + 1 << ende; + return 0; } diff --git a/contests/SBC15/K.cpp b/contests/SBC15/K.cpp index 7d25517..72a0246 100644 --- a/contests/SBC15/K.cpp +++ b/contests/SBC15/K.cpp @@ -28,42 +28,42 @@ int v[MAX]; ii dp[MAX][MAX]; ii operator+(const ii &a, const ii &b) { - return {a.fi + b.fi, a.se + b.se}; + return {a.fi + b.fi, a.se + b.se}; } ii solve(int l, int r) { - if (l > r) return ii(0, 0); - if (l == r) return ii(v[l], 1); - - if (dp[l][r].fi != -1) - return dp[l][r]; - - ii op = {-inf, -inf}; - if (s[l] == s[r]) - op = solve(l + 1, r - 1) + ii(v[l] + v[r], 2); - - return dp[l][r] = max({ - op, - solve(l + 1, r - 1), - solve(l + 1, r), - solve(l, r - 1) - }); + if (l > r) return ii(0, 0); + if (l == r) return ii(v[l], 1); + + if (dp[l][r].fi != -1) + return dp[l][r]; + + ii op = {-inf, -inf}; + if (s[l] == s[r]) + op = solve(l + 1, r - 1) + ii(v[l] + v[r], 2); + + return dp[l][r] = max({ + op, + solve(l + 1, r - 1), + solve(l + 1, r), + solve(l, r - 1) + }); } int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - cin >> s >> n; - for (int i = 0; i < n; ++i) { - int x; cin >> x; - v[x - 1] = 1; - } + cin >> s >> n; + for (int i = 0; i < n; ++i) { + int x; cin >> x; + v[x - 1] = 1; + } - for (int i = 0; i < MAX; ++i) - for (int j = 0; j < MAX; ++j) - dp[i][j] = {-1, -1}; + for (int i = 0; i < MAX; ++i) + for (int j = 0; j < MAX; ++j) + dp[i][j] = {-1, -1}; - cout << solve(0, s.size() - 1).se << ende; - return 0; + cout << solve(0, s.size() - 1).se << ende; + return 0; } diff --git a/contests/SBC16/A.cpp b/contests/SBC16/A.cpp index ef761a5..49226cf 100644 --- a/contests/SBC16/A.cpp +++ b/contests/SBC16/A.cpp @@ -22,28 +22,28 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - vector<int> v(3); - for (auto &i: v) cin >> i; - - bool poss = false; - for (int i = 1; i < 8; ++i) { - for (int j = 0; j < 8; ++j) { - int sum = 0; - for (int k = 0; k < 3; ++k) { - if (i & (1 << k)) { - if (j & (1 << k)) sum += v[k]; - else sum -= v[k]; + ios::sync_with_stdio(0); + cin.tie(0); + + vector<int> v(3); + for (auto &i: v) cin >> i; + + bool poss = false; + for (int i = 1; i < 8; ++i) { + for (int j = 0; j < 8; ++j) { + int sum = 0; + for (int k = 0; k < 3; ++k) { + if (i & (1 << k)) { + if (j & (1 << k)) sum += v[k]; + else sum -= v[k]; + } + } + + if (sum == 0) poss = true; } - } - - if (sum == 0) poss = true; } - } - if (poss) cout << "S" << ende; - else cout << "N" << ende; - return 0; + if (poss) cout << "S" << ende; + else cout << "N" << ende; + return 0; } diff --git a/contests/SBC16/H.cpp b/contests/SBC16/H.cpp index 9a514f4..5ca985a 100644 --- a/contests/SBC16/H.cpp +++ b/contests/SBC16/H.cpp @@ -22,20 +22,20 @@ using ll = long long; using ii = pair<int,int>; bool vowel(char x) { - return (x == 'a') || (x == 'e') || (x == 'i') || (x == 'o') || (x == 'u'); + return (x == 'a') || (x == 'e') || (x == 'i') || (x == 'o') || (x == 'u'); } int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - string s; cin >> s; - string t, w; - for (auto i : s) if (vowel(i)) t.pb(i); - w = t; - reverse(all(t)); - if (w == t) cout << "S" << ende; - else cout << "N" << ende; - - return 0; + ios::sync_with_stdio(0); + cin.tie(0); + + string s; cin >> s; + string t, w; + for (auto i : s) if (vowel(i)) t.pb(i); + w = t; + reverse(all(t)); + if (w == t) cout << "S" << ende; + else cout << "N" << ende; + + return 0; } diff --git a/contests/SBC17/A.cpp b/contests/SBC17/A.cpp index a4c783a..7c16509 100644 --- a/contests/SBC17/A.cpp +++ b/contests/SBC17/A.cpp @@ -24,32 +24,32 @@ typedef long long ll; typedef pair<int,int> ii; typedef struct elem { - int freq[9]; - - elem() { - for (int i = 0; i < 9; ++i) freq[i] = 0; - } - - elem(int x) { - for (int i = 0; i < 9; ++i) freq[i] = 0; - freq[x] = 1; - } - - elem operator+(const elem &a) { - elem e; - for (int i = 0; i < 9; ++i) - e.freq[i] = a.freq[i] + freq[i]; - return e; - } - - void change(int x) { - vector<int> aux(9, 0); - for (int i = 0; i < 9; ++i) - aux[(i + x) % 9] += freq[i]; - - for (int i = 0; i < 9; ++i) - freq[i] = aux[i]; - } + int freq[9]; + + elem() { + for (int i = 0; i < 9; ++i) freq[i] = 0; + } + + elem(int x) { + for (int i = 0; i < 9; ++i) freq[i] = 0; + freq[x] = 1; + } + + elem operator+(const elem &a) { + elem e; + for (int i = 0; i < 9; ++i) + e.freq[i] = a.freq[i] + freq[i]; + return e; + } + + void change(int x) { + vector<int> aux(9, 0); + for (int i = 0; i < 9; ++i) + aux[(i + x) % 9] += freq[i]; + + for (int i = 0; i < 9; ++i) + freq[i] = aux[i]; + } } elem; @@ -62,99 +62,99 @@ int lazy[4 * MAX]; #define right(x) ((x << 1) + 1) void build(int node = 1, int a = 0, int b = N - 1) { - if (a > b) - return; + if (a > b) + return; - if (a == b) { - tree[node] = v[a]; - return; - } + if (a == b) { + tree[node] = v[a]; + return; + } - build(left(node), a, (a + b) / 2); - build(right(node), (a + b) / 2 + 1, b); - tree[node] = tree[node * 2] + tree[node * 2 + 1]; + build(left(node), a, (a + b) / 2); + build(right(node), (a + b) / 2 + 1, b); + tree[node] = tree[node * 2] + tree[node * 2 + 1]; } void push(int node, int a, int b, int val) { - tree[node].change(val); + tree[node].change(val); - if (a != b) { - lazy[left(node)] += val; - lazy[right(node)] += val; - } + if (a != b) { + lazy[left(node)] += val; + lazy[right(node)] += val; + } - lazy[node] = 0; + lazy[node] = 0; } void update(int i, int j, int val, int node = 1, int a = 0, int b = N - 1) { - if (lazy[node] != 0) - push(node, a, b, lazy[node]); + if (lazy[node] != 0) + push(node, a, b, lazy[node]); - if (a > b || a > j || b < i) - return; + if (a > b || a > j || b < i) + return; - if (i <= a && b <= j) { - push(node, a, b, val); - return; - } + if (i <= a && b <= j) { + push(node, a, b, val); + return; + } - update(i, j, val, left(node), a, (a + b) / 2); - update(i, j, val, right(node), (a + b) / 2 + 1, b); - tree[node] = tree[node * 2] + tree[node * 2 + 1]; + update(i, j, val, left(node), a, (a + b) / 2); + update(i, j, val, right(node), (a + b) / 2 + 1, b); + tree[node] = tree[node * 2] + tree[node * 2 + 1]; } elem query(int i, int j, int node = 1, int a = 0, int b = N - 1) { - if (a > b || a > j || b < i) - return elem(); + if (a > b || a > j || b < i) + return elem(); - if (lazy[node]) - push(node, a, b, lazy[node]); + if (lazy[node]) + push(node, a, b, lazy[node]); - if (a >= i && b <= j) - return tree[node]; + if (a >= i && b <= j) + return tree[node]; - elem q1 = query(i, j, left(node), a, (a + b) / 2); - elem q2 = query(i, j, right(node), (a + b) / 2 + 1, b); - return q1 + q2; + elem q1 = query(i, j, left(node), a, (a + b) / 2); + elem q2 = query(i, j, right(node), (a + b) / 2 + 1, b); + return q1 + q2; } int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - int n, q; cin >> n >> q; - for (int i = 0; i < n; ++i) - v[i] = elem(1); + int n, q; cin >> n >> q; + for (int i = 0; i < n; ++i) + v[i] = elem(1); - N = n; - build(); + N = n; + build(); - for (int i = 0; i < q; ++i) { - int a, b; cin >> a >> b; - elem e = query(a, b); + for (int i = 0; i < q; ++i) { + int a, b; cin >> a >> b; + elem e = query(a, b); - int grt = 0; - for (int i = 1; i < 9; ++i) - if (e.freq[i] >= e.freq[grt]) - grt = i; + int grt = 0; + for (int i = 1; i < 9; ++i) + if (e.freq[i] >= e.freq[grt]) + grt = i; - update(a, b, grt); - } + update(a, b, grt); + } - for (int i = 0; i < n; ++i) { - elem e = query(i, i); + for (int i = 0; i < n; ++i) { + elem e = query(i, i); - int grt = 0; - for (int i = 0; i < 9; ++i) - if (e.freq[i] >= e.freq[grt]) - grt = i; + int grt = 0; + for (int i = 0; i < 9; ++i) + if (e.freq[i] >= e.freq[grt]) + grt = i; - cout << grt << ende; - } + cout << grt << ende; + } - return 0; + return 0; } diff --git a/contests/SBC17/B.cpp b/contests/SBC17/B.cpp index 2335382..6373cb7 100644 --- a/contests/SBC17/B.cpp +++ b/contests/SBC17/B.cpp @@ -24,35 +24,35 @@ typedef pair<int,int> ii; int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - ll n, t, a0, x, y; - cin >> n >> t >> a0 >> x >> y; + ll n, t, a0, x, y; + cin >> n >> t >> a0 >> x >> y; - vector<ll> tor(t); - for (auto &i : tor) cin >> i; + vector<ll> tor(t); + for (auto &i : tor) cin >> i; - auto next = [&]() { - ll xxor = 0; - for (auto i : tor) - xxor ^= !!(a0 & (1 << i)); - return a0 = ((a0 >> 1) | (xxor << (n - 1))); - }; + auto next = [&]() { + ll xxor = 0; + for (auto i : tor) + xxor ^= !!(a0 & (1 << i)); + return a0 = ((a0 >> 1) | (xxor << (n - 1))); + }; - vector<ll> idx(x + 1, 0); - idx[0] = 1; + vector<ll> idx(x + 1, 0); + idx[0] = 1; - ll acc = a0 % x; - for (ll i = 2; ; ++i) { - if (idx[acc] && i - idx[acc] >= y) - return cout << idx[acc] - 1 << " " << i - 2 << ende, 0; - else if (!idx[acc]) - idx[acc] = i; + ll acc = a0 % x; + for (ll i = 2; ; ++i) { + if (idx[acc] && i - idx[acc] >= y) + return cout << idx[acc] - 1 << " " << i - 2 << ende, 0; + else if (!idx[acc]) + idx[acc] = i; - acc = (acc + next()) % x; - } + acc = (acc + next()) % x; + } - return 0; + return 0; } diff --git a/contests/SBC17/C.cpp b/contests/SBC17/C.cpp index ccd9f72..6fb74d8 100644 --- a/contests/SBC17/C.cpp +++ b/contests/SBC17/C.cpp @@ -23,31 +23,31 @@ typedef long long ll; typedef pair<int,int> ii; ll lcm(ll a, ll b) { - return (a * b) / __gcd(a, b); + return (a * b) / __gcd(a, b); } int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - ll n, l; cin >> n >> l; - ll acc = 1; - for (int i = 0; i < n; ++i) { - ll x; cin >> x; - acc = lcm(acc, x); - } - - ll ans = -1; - ll grt = -1; - for (int i = 1; i <= l; ++i) { - ll lc = lcm(acc, i); - if (lc > grt && lc <= l) { - grt = lc; - ans = i; + ios::sync_with_stdio(0); + cin.tie(0); + + ll n, l; cin >> n >> l; + ll acc = 1; + for (int i = 0; i < n; ++i) { + ll x; cin >> x; + acc = lcm(acc, x); } - } - cout << ans << ende; - return 0; + ll ans = -1; + ll grt = -1; + for (int i = 1; i <= l; ++i) { + ll lc = lcm(acc, i); + if (lc > grt && lc <= l) { + grt = lc; + ans = i; + } + } + + cout << ans << ende; + return 0; } diff --git a/contests/SBC17/D.cpp b/contests/SBC17/D.cpp index a564513..5eb985a 100644 --- a/contests/SBC17/D.cpp +++ b/contests/SBC17/D.cpp @@ -24,34 +24,34 @@ typedef long long ll; typedef pair<int,int> ii; int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - ll n; cin >> n; - vector<ll> f; - vector<ll> fat; + ll n; cin >> n; + vector<ll> f; + vector<ll> fat; - ll acc = 1; - fat.pb(1); - for (ll i = 1; i <= 40; ++i) { - acc *= i; - fat.pb(acc); - } + ll acc = 1; + fat.pb(1); + for (ll i = 1; i <= 40; ++i) { + acc *= i; + fat.pb(acc); + } - if (n % 2 == 0) f.pb(2); - while (n % 2 == 0) n /= 2; + if (n % 2 == 0) f.pb(2); + while (n % 2 == 0) n /= 2; - for (ll i = 3; i*i <= n; i+=2) { - if (n % i == 0) f.pb(i); - while (n % i == 0) n /= i; - } + for (ll i = 3; i*i <= n; i+=2) { + if (n % i == 0) f.pb(i); + while (n % i == 0) n /= i; + } - if (n > 2) f.pb(n); + if (n > 2) f.pb(n); - ll ans = 0; - for (ll i = 2; i <= f.sz; ++i) - ans += fat[f.sz] / (fat[f.sz - i] * fat[i]); - cout << ans << ende; + ll ans = 0; + for (ll i = 2; i <= f.sz; ++i) + ans += fat[f.sz] / (fat[f.sz - i] * fat[i]); + cout << ans << ende; - return 0; + return 0; } diff --git a/contests/SBC17/E.cpp b/contests/SBC17/E.cpp index da22012..4bfbf0b 100644 --- a/contests/SBC17/E.cpp +++ b/contests/SBC17/E.cpp @@ -24,37 +24,37 @@ typedef long long ll; typedef pair<int,int> ii; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - vector<string> notas = {"do", "do#", "re", "re#", "mi", "fa", "fa#", "sol", "sol#", "la", "la#", "si"}; - vector<int> count(notas.sz); - vector<int> diff = {2, 2, 1, 2, 2, 2, 1}; - vector<vector<int>> v(notas.sz, vector<int>(notas.sz, 0)); - - for (int i = 0; i < v.sz; ++i) { - int beg = i; - for (int j = 0; j < diff.sz; ++j) { - v[i][beg] = 1; - beg = (beg + diff[j]) % 12; + ios::sync_with_stdio(0); + cin.tie(0); + + vector<string> notas = {"do", "do#", "re", "re#", "mi", "fa", "fa#", "sol", "sol#", "la", "la#", "si"}; + vector<int> count(notas.sz); + vector<int> diff = {2, 2, 1, 2, 2, 2, 1}; + vector<vector<int>> v(notas.sz, vector<int>(notas.sz, 0)); + + for (int i = 0; i < v.sz; ++i) { + int beg = i; + for (int j = 0; j < diff.sz; ++j) { + v[i][beg] = 1; + beg = (beg + diff[j]) % 12; + } } - } - - int n; cin >> n; - for (int i = 0; i < n; ++i) { - int x; cin >> x; x--; - count[x % 12]++; - } - - for (int i = 0; i < 12; ++i) { - bool poss = true; - for (int j = 0; j < 12; ++j) - if (count[j] and !v[i][j]) - poss = false; - if (poss) - return cout << notas[i] << ende, 0; - } - cout << "desafinado" << ende; - - return 0; + + int n; cin >> n; + for (int i = 0; i < n; ++i) { + int x; cin >> x; x--; + count[x % 12]++; + } + + for (int i = 0; i < 12; ++i) { + bool poss = true; + for (int j = 0; j < 12; ++j) + if (count[j] and !v[i][j]) + poss = false; + if (poss) + return cout << notas[i] << ende, 0; + } + cout << "desafinado" << ende; + + return 0; } diff --git a/contests/SBC17/F.cpp b/contests/SBC17/F.cpp index e52ecd1..6ef131c 100644 --- a/contests/SBC17/F.cpp +++ b/contests/SBC17/F.cpp @@ -24,17 +24,17 @@ typedef long long ll; typedef pair<int,int> ii; int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - int n, k; cin >> n >> k; - vector<int> v(n); - for (auto &i : v) cin >> i; - sort(rall(v)); + int n, k; cin >> n >> k; + vector<int> v(n); + for (auto &i : v) cin >> i; + sort(rall(v)); - int ans = k; - while (v[ans] == v[ans-1] and ans < n) ans++; - cout << ans << ende; + int ans = k; + while (v[ans] == v[ans-1] and ans < n) ans++; + cout << ans << ende; - return 0; + return 0; } diff --git a/contests/SBC17/G.cpp b/contests/SBC17/G.cpp index 9282ec0..40f4054 100644 --- a/contests/SBC17/G.cpp +++ b/contests/SBC17/G.cpp @@ -26,24 +26,24 @@ typedef pair<int,int> ii; ll dp[51][MAX]; int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - int t, m, n; cin >> t >> m >> n; + int t, m, n; cin >> t >> m >> n; - for (int i = m; i <= n; ++i) - dp[1][i] = 1; + for (int i = m; i <= n; ++i) + dp[1][i] = 1; - for (int i = 2; i <= t; ++i) - for (int j = m; j <= n; ++j) - if (j == m) dp[i][j] = dp[i-1][j+1]; - else if (j == n) dp[i][j] = dp[i-1][j-1]; - else dp[i][j] = (dp[i-1][j-1] + dp[i-1][j+1]) % MOD; + for (int i = 2; i <= t; ++i) + for (int j = m; j <= n; ++j) + if (j == m) dp[i][j] = dp[i-1][j+1]; + else if (j == n) dp[i][j] = dp[i-1][j-1]; + else dp[i][j] = (dp[i-1][j-1] + dp[i-1][j+1]) % MOD; - ll ans = 0; - for (int i = m; i <= n; ++i) - ans = (ans + dp[t][i]) % MOD; + ll ans = 0; + for (int i = m; i <= n; ++i) + ans = (ans + dp[t][i]) % MOD; - cout << ans << ende; - return 0; + cout << ans << ende; + return 0; } diff --git a/contests/SBC17/H.cpp b/contests/SBC17/H.cpp index 654d0bf..151c9cc 100644 --- a/contests/SBC17/H.cpp +++ b/contests/SBC17/H.cpp @@ -27,27 +27,27 @@ typedef pair<double,double> dd; int dp[MAX][MAX]; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n; cin >> n; - double xa, xb; cin >> xa >> xb; - - vector<dd> pp; - pp.pb(dd(-1, -1)); - for (int i = 0; i < n; ++i) { - double x, y; cin >> x >> y; - pp.pb(dd(asin(y / hypot(xa - x, y)), asin(y / hypot(xb - x, y)))); - } - - sort(all(pp)); - for (int i = n + 1; i >= 1; --i) - for (int j = 0; j <= n; ++j) - if (j == 0 || (pp[i].fi > pp[j].fi && pp[i].se > pp[j].se)) - dp[i][j] = max(dp[i+1][i] + 1, dp[i+1][j]); - else - dp[i][j] = dp[i+1][j]; - - cout << dp[1][0] << ende; - return 0; + ios::sync_with_stdio(0); + cin.tie(0); + + int n; cin >> n; + double xa, xb; cin >> xa >> xb; + + vector<dd> pp; + pp.pb(dd(-1, -1)); + for (int i = 0; i < n; ++i) { + double x, y; cin >> x >> y; + pp.pb(dd(asin(y / hypot(xa - x, y)), asin(y / hypot(xb - x, y)))); + } + + sort(all(pp)); + for (int i = n + 1; i >= 1; --i) + for (int j = 0; j <= n; ++j) + if (j == 0 || (pp[i].fi > pp[j].fi && pp[i].se > pp[j].se)) + dp[i][j] = max(dp[i+1][i] + 1, dp[i+1][j]); + else + dp[i][j] = dp[i+1][j]; + + cout << dp[1][0] << ende; + return 0; } diff --git a/contests/SBC17/I.cpp b/contests/SBC17/I.cpp index 0f7b97d..74267a2 100644 --- a/contests/SBC17/I.cpp +++ b/contests/SBC17/I.cpp @@ -30,37 +30,37 @@ bool cont[MAX]; vector<ii> graph[MAX]; int dfs(int x) { - cont[x] = true; + cont[x] = true; - for (auto i : graph[x]) { - if (!cont[i.fi]) { - E[x] += dfs(i.fi); - ans += 2 * i.se * ((E[i.fi] - 1) / C + 1); + for (auto i : graph[x]) { + if (!cont[i.fi]) { + E[x] += dfs(i.fi); + ans += 2 * i.se * ((E[i.fi] - 1) / C + 1); + } } - } - return E[x]; + return E[x]; } int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n; cin >> n >> C; - for (int i = 0; i < n; ++i) - cin >> E[i]; - - for (int i = 0; i < n - 1; ++i) { - int a, b, c; cin >> a >> b >> c; - a--, b--; - graph[a].pb(ii(b, c)); - graph[b].pb(ii(a, c)); - } + ios::sync_with_stdio(0); + cin.tie(0); + + int n; cin >> n >> C; + for (int i = 0; i < n; ++i) + cin >> E[i]; + + for (int i = 0; i < n - 1; ++i) { + int a, b, c; cin >> a >> b >> c; + a--, b--; + graph[a].pb(ii(b, c)); + graph[b].pb(ii(a, c)); + } - dfs(0); - cout << ans << ende; + dfs(0); + cout << ans << ende; - return 0; + return 0; } diff --git a/contests/SBC17/J.cpp b/contests/SBC17/J.cpp index f9b9b64..455eee4 100644 --- a/contests/SBC17/J.cpp +++ b/contests/SBC17/J.cpp @@ -24,13 +24,13 @@ typedef long long ll; typedef pair<int,int> ii; int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - ll num = 0; - string s; cin >> s; - for (auto i : s) num += i - '0'; - cout << num % 3 << ende; + ll num = 0; + string s; cin >> s; + for (auto i : s) num += i - '0'; + cout << num % 3 << ende; - return 0; + return 0; } diff --git a/contests/SBC17/K.cpp b/contests/SBC17/K.cpp index 1215b51..2b01761 100644 --- a/contests/SBC17/K.cpp +++ b/contests/SBC17/K.cpp @@ -26,77 +26,77 @@ typedef pair<int,int> ii; template <typename T> struct matrix { - T m[K][K]; + T m[K][K]; - matrix operator*(matrix a) { - matrix aux; + matrix operator*(matrix a) { + matrix aux; - for (int i = 0; i < K; i++) - for (int j = 0; j < K; j++) { - ll sum = 0; + for (int i = 0; i < K; i++) + for (int j = 0; j < K; j++) { + ll sum = 0; - for (int k = 0; k < K; k++) - sum += (m[i][k] * a[k][j]) % MOD; + for (int k = 0; k < K; k++) + sum += (m[i][k] * a[k][j]) % MOD; - aux[i][j] = sum % MOD; - } - - return aux; - } + aux[i][j] = sum % MOD; + } - T *operator[](int i) { - return m[i]; - } + return aux; + } - void clear() { - mset(m, 0); - } + T *operator[](int i) { + return m[i]; + } + + void clear() { + mset(m, 0); + } }; matrix<ll> matrix_pow(matrix<ll> in, ll n) { - matrix<ll> ans, b = in; + matrix<ll> ans, b = in; - ans.clear(); - for (int i = 0; i < K; ++i) - ans[i][i] = 1; + ans.clear(); + for (int i = 0; i < K; ++i) + ans[i][i] = 1; - while (n) { - if (n & 1) - ans = ans * b; + while (n) { + if (n & 1) + ans = ans * b; - n >>= 1; - b = b * b; - } + n >>= 1; + b = b * b; + } - return ans; + return ans; } matrix<ll> solve(ll x, ll y, ll n) { - matrix<ll> in; + matrix<ll> in; - in[0][0] = x % MOD; - in[0][1] = y % MOD; - in[1][0] = 1; - in[1][1] = 0; + in[0][0] = x % MOD; + in[0][1] = y % MOD; + in[1][0] = 1; + in[1][1] = 0; - return matrix_pow(in, n); + return matrix_pow(in, n); } int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); + + ll a, b, n, k; cin >> a >> b >> n >> k; - ll a, b, n, k; cin >> a >> b >> n >> k; + matrix<ll> ans = solve(2 * a, (b - a * a) + MOD, n - 1); + ll res = (ans[0][0] * 2 * a + ans[0][1] * 2) % MOD; - matrix<ll> ans = solve(2 * a, (b - a * a) + MOD, n - 1); - ll res = (ans[0][0] * 2 * a + ans[0][1] * 2) % MOD; + if (a * a > b || (a * a < b && n % 2 == 0)) + res = ((res - 1) + MOD) % MOD; - if (a * a > b || (a * a < b && n % 2 == 0)) - res = ((res - 1) + MOD) % MOD; + for (int i = 0; i < k-1; ++i) + res /= 10; - for (int i = 0; i < k-1; ++i) - res /= 10; - - cout << res % 10 << ende; - return 0; + cout << res % 10 << ende; + return 0; } diff --git a/contests/SBC17/L.cpp b/contests/SBC17/L.cpp index c2e782b..ffee984 100644 --- a/contests/SBC17/L.cpp +++ b/contests/SBC17/L.cpp @@ -22,134 +22,134 @@ typedef long long ll; typedef pair<int,int> ii; struct comp { - float r, i; + float r, i; - comp() : r(0), i(0) {} - comp(float r, float i) : r(r), i(i) {} + comp() : r(0), i(0) {} + comp(float r, float i) : r(r), i(i) {} - comp operator+(comp b) { - return comp(r + b.r, i + b.i); - } + comp operator+(comp b) { + return comp(r + b.r, i + b.i); + } - comp operator-(comp b) { - return comp(r - b.r, i - b.i); - } + comp operator-(comp b) { + return comp(r - b.r, i - b.i); + } - comp operator*(comp b) { - return comp(r * b.r - i * b.i, r * b.i + i * b.r); - } + comp operator*(comp b) { + return comp(r * b.r - i * b.i, r * b.i + i * b.r); + } - comp operator/(comp b) { - float div = (b.r * b.r) + (b.i * b.i); - return comp((r * b.r + i * b.i) / div, (i * b.r - r * b.i) / div); - } + comp operator/(comp b) { + float div = (b.r * b.r) + (b.i * b.i); + return comp((r * b.r + i * b.i) / div, (i * b.r - r * b.i) / div); + } }; inline comp conj(comp a) { - return comp(a.r, -a.i); + return comp(a.r, -a.i); } vector<int> rev = {0, 1}; vector<comp> roots = {{0, 0}, {1, 0}}; void init(int nbase) { - rev.resize(1 << nbase); - roots.resize(1 << nbase); + rev.resize(1 << nbase); + roots.resize(1 << nbase); - for (int i = 0; i < (1 << nbase); ++i) - rev[i] = (rev[i >> 1] >> 1) + ((i & 1) << (nbase - 1)); + for (int i = 0; i < (1 << nbase); ++i) + rev[i] = (rev[i >> 1] >> 1) + ((i & 1) << (nbase - 1)); - for (int base = 1; base < nbase; ++base) { - float angle = 2 * M_PI / (1 << (base + 1)); + for (int base = 1; base < nbase; ++base) { + float angle = 2 * M_PI / (1 << (base + 1)); - for (int i = 1 << (base - 1); i < (1 << base); ++i) { - float angle_i = angle * (2 * i + 1 - (1 << base)); + for (int i = 1 << (base - 1); i < (1 << base); ++i) { + float angle_i = angle * (2 * i + 1 - (1 << base)); - roots[i << 1] = roots[i]; - roots[(i << 1) + 1] = comp(cos(angle_i), sin(angle_i)); + roots[i << 1] = roots[i]; + roots[(i << 1) + 1] = comp(cos(angle_i), sin(angle_i)); + } } - } } void fft(vector<comp> &a) { - int n = a.size(); + int n = a.size(); - for (int i = 0; i < n; ++i) - if (i < rev[i]) - swap(a[i], a[rev[i]]); + for (int i = 0; i < n; ++i) + if (i < rev[i]) + swap(a[i], a[rev[i]]); - for (int s = 1; s < n; s <<= 1) { - for (int k = 0; k < n; k += (s << 1)) { - for (int j = 0; j < s; ++j) { - comp z = a[k + j + s] * roots[j + s]; + for (int s = 1; s < n; s <<= 1) { + for (int k = 0; k < n; k += (s << 1)) { + for (int j = 0; j < s; ++j) { + comp z = a[k + j + s] * roots[j + s]; - a[k + j + s] = a[k + j] - z; - a[k + j] = a[k + j] + z; - } + a[k + j + s] = a[k + j] - z; + a[k + j] = a[k + j] + z; + } + } } - } } vector<int> multiply(vector<int> &a, vector<int> &b) { - int nbase, need = a.size() + b.size() + 1; + int nbase, need = a.size() + b.size() + 1; - for (nbase = 0; (1 << nbase) < need; ++nbase); - init(nbase); + for (nbase = 0; (1 << nbase) < need; ++nbase); + init(nbase); - int size = 1 << nbase; - vector<comp> fa(size); + int size = 1 << nbase; + vector<comp> fa(size); - for (int i = 0; i < size; ++i) { - int x = (i < a.size() ? a[i] : 0); - int y = (i < b.size() ? b[i] : 0); - fa[i] = comp(x, y); - } + for (int i = 0; i < size; ++i) { + int x = (i < a.size() ? a[i] : 0); + int y = (i < b.size() ? b[i] : 0); + fa[i] = comp(x, y); + } - fft(fa); + fft(fa); - comp r(0, -0.25 / size); - for (int i = 0; i <= (size >> 1); ++i) { - int j = (size - i) & (size - 1); - comp z = (fa[j] * fa[j] - conj(fa[i] * fa[i])) * r; + comp r(0, -0.25 / size); + for (int i = 0; i <= (size >> 1); ++i) { + int j = (size - i) & (size - 1); + comp z = (fa[j] * fa[j] - conj(fa[i] * fa[i])) * r; - if (i != j) - fa[j] = (fa[i] * fa[i] - conj(fa[j] * fa[j])) * r; - fa[i] = z; - } + if (i != j) + fa[j] = (fa[i] * fa[i] - conj(fa[j] * fa[j])) * r; + fa[i] = z; + } - fft(fa); + fft(fa); - vector<int> res(need); - for (int i = 0; i < need; ++i) - res[i] = fa[i].r + 0.5; + vector<int> res(need); + for (int i = 0; i < need; ++i) + res[i] = fa[i].r + 0.5; - return res; + return res; } int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - string s; cin >> s; - int n = s.size(); - - int acc = 0, sum = s[0] - 'a' + 1; - for (int i = 1; i < n; ++i) - sum += s[i] - 'a' + 1; - - vector<int> a(sum + 1), b(sum + 1); - a[0] = b[sum] = 1; - for (int i = 0; i < n; ++i) { - acc += s[i] - 'a' + 1; - a[acc] = b[sum - acc] = 1; - } - - vector<int> c = multiply(a, b); - int ans = 0; - for (int i = sum + 1; i <= 2 * sum; ++i) - if (c[i]) ans++; - - cout << ans << ende; - return 0; + ios::sync_with_stdio(0); + cin.tie(0); + + string s; cin >> s; + int n = s.size(); + + int acc = 0, sum = s[0] - 'a' + 1; + for (int i = 1; i < n; ++i) + sum += s[i] - 'a' + 1; + + vector<int> a(sum + 1), b(sum + 1); + a[0] = b[sum] = 1; + for (int i = 0; i < n; ++i) { + acc += s[i] - 'a' + 1; + a[acc] = b[sum - acc] = 1; + } + + vector<int> c = multiply(a, b); + int ans = 0; + for (int i = sum + 1; i <= 2 * sum; ++i) + if (c[i]) ans++; + + cout << ans << ende; + return 0; } diff --git a/contests/SBC17/M.cpp b/contests/SBC17/M.cpp index 3cc1ffd..69bad13 100644 --- a/contests/SBC17/M.cpp +++ b/contests/SBC17/M.cpp @@ -24,15 +24,15 @@ typedef long long ll; typedef pair<int,int> ii; int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - int a, b, c; cin >> a >> b >> c; + int a, b, c; cin >> a >> b >> c; - int x1 = a*0 + b*2 + c*4; - int x2 = a*2 + b*0 + c*2; - int x3 = a*4 + b*2 + c*0; - cout << min(x1, min(x2, x3)) << ende; + int x1 = a*0 + b*2 + c*4; + int x2 = a*2 + b*0 + c*2; + int x3 = a*4 + b*2 + c*0; + cout << min(x1, min(x2, x3)) << ende; - return 0; + return 0; } diff --git a/contests/SBC18/B.cpp b/contests/SBC18/B.cpp index 75822af..0787afd 100644 --- a/contests/SBC18/B.cpp +++ b/contests/SBC18/B.cpp @@ -25,45 +25,45 @@ int foi[500]; int dp[102][102]; int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - int N = 100; - for (int i = 0; i < N; ++i) { - dp[i][i] = 499; - dp[0][i] = 499; - dp[i][0] = 499; - } + int N = 100; + for (int i = 0; i < N; ++i) { + dp[i][i] = 499; + dp[0][i] = 499; + dp[i][0] = 499; + } + + for (int i = 1; i <= N; ++i) { + for (int j = 1; j <= N; ++j) { + if (i != j) { + mset(foi, 0); + for (int k = 1; k <= i; ++k) + foi[dp[i-k][j]] = 1; + for (int k = 1; k <= j; ++k) + foi[dp[i][j-k]] = 1; + for (int k = 1; k <= min(i, j); ++k) + foi[dp[i-k][j-k]] = 1; - for (int i = 1; i <= N; ++i) { - for (int j = 1; j <= N; ++j) { - if (i != j) { - mset(foi, 0); - for (int k = 1; k <= i; ++k) - foi[dp[i-k][j]] = 1; - for (int k = 1; k <= j; ++k) - foi[dp[i][j-k]] = 1; - for (int k = 1; k <= min(i, j); ++k) - foi[dp[i-k][j-k]] = 1; + for (int k = 0; k <= 500; ++k) + if (!foi[k]) { + dp[i][j] = k; + break; + } + } + } + } - for (int k = 0; k <= 500; ++k) - if (!foi[k]) { - dp[i][j] = k; - break; - } - } + int n; cin >> n; + int ans = 0; + for (int i = 0; i < n; ++i) { + int a, b; cin >> a >> b; + if (a == b) + return cout << 'Y' << ende, 0; + ans ^= dp[a][b]; } - } - - int n; cin >> n; - int ans = 0; - for (int i = 0; i < n; ++i) { - int a, b; cin >> a >> b; - if (a == b) - return cout << 'Y' << ende, 0; - ans ^= dp[a][b]; - } - cout << (ans ? 'Y' : 'N') << ende; - return 0; + cout << (ans ? 'Y' : 'N') << ende; + return 0; } diff --git a/contests/SBC18/C.cpp b/contests/SBC18/C.cpp index 1199b95..66d3e30 100644 --- a/contests/SBC18/C.cpp +++ b/contests/SBC18/C.cpp @@ -25,61 +25,61 @@ using ii = pair<int,int>; int tree[MAX]; int query(int idx) { - int sum = 0; - for ( ; idx > 0; idx -= (idx & -idx)) - sum += tree[idx]; - return sum; + int sum = 0; + for ( ; idx > 0; idx -= (idx & -idx)) + sum += tree[idx]; + return sum; } void update(int idx, int val) { - for ( ; idx < MAX; idx += (idx & -idx)) - tree[idx] += val; + for ( ; idx < MAX; idx += (idx & -idx)) + tree[idx] += val; } int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int x, y; cin >> x >> y; - int h, v; cin >> h >> v; - vector<ii> H(h), V(v); - - for (int i = 0; i < h; ++i) { - int x1, x2; cin >> x1 >> x2; - H[i] = ii(x1, x2); - } - - for (int i = 0; i < v; ++i) { - int y1, y2; cin >> y1 >> y2; - V[i] = ii(y1, y2); - } - - sort(all(H)); - for (int i = 0; i < h; ++i) - H[i].fi = i + 1; - sort(all(H), [](ii a, ii b) { - return a.se < b.se; - }); - - sort(all(V)); - for (int i = 0; i < v; ++i) - V[i].fi = i + 1; - sort(all(V), [](ii a, ii b) { - return a.se < b.se; - }); - - ll ans = (h + 1LL) * (v + 1LL); - for (int i = h - 1; i >= 0; --i) { - ans += query(H[i].fi); - update(H[i].fi, 1); - } - - mset(tree, 0); - for (int i = v - 1; i >= 0; --i) { - ans += query(V[i].fi); - update(V[i].fi, 1); - } - - cout << ans << ende; - return 0; + ios::sync_with_stdio(0); + cin.tie(0); + + int x, y; cin >> x >> y; + int h, v; cin >> h >> v; + vector<ii> H(h), V(v); + + for (int i = 0; i < h; ++i) { + int x1, x2; cin >> x1 >> x2; + H[i] = ii(x1, x2); + } + + for (int i = 0; i < v; ++i) { + int y1, y2; cin >> y1 >> y2; + V[i] = ii(y1, y2); + } + + sort(all(H)); + for (int i = 0; i < h; ++i) + H[i].fi = i + 1; + sort(all(H), [](ii a, ii b) { + return a.se < b.se; + }); + + sort(all(V)); + for (int i = 0; i < v; ++i) + V[i].fi = i + 1; + sort(all(V), [](ii a, ii b) { + return a.se < b.se; + }); + + ll ans = (h + 1LL) * (v + 1LL); + for (int i = h - 1; i >= 0; --i) { + ans += query(H[i].fi); + update(H[i].fi, 1); + } + + mset(tree, 0); + for (int i = v - 1; i >= 0; --i) { + ans += query(V[i].fi); + update(V[i].fi, 1); + } + + cout << ans << ende; + return 0; } diff --git a/contests/SBC18/D.cpp b/contests/SBC18/D.cpp index 7381f96..e58bc6a 100644 --- a/contests/SBC18/D.cpp +++ b/contests/SBC18/D.cpp @@ -22,16 +22,16 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n; cin >> n; - int ans = 0; - for (int i = 0; i < n; ++i) { - int x; cin >> x; - ans += (x != 1); - } - - cout << ans << ende; - return 0; + ios::sync_with_stdio(0); + cin.tie(0); + + int n; cin >> n; + int ans = 0; + for (int i = 0; i < n; ++i) { + int x; cin >> x; + ans += (x != 1); + } + + cout << ans << ende; + return 0; } diff --git a/contests/SBC18/E.cpp b/contests/SBC18/E.cpp index c22dca2..d375a3e 100644 --- a/contests/SBC18/E.cpp +++ b/contests/SBC18/E.cpp @@ -22,23 +22,23 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - string s, t; cin >> s >> t; - int ans = 0; - for (int i = 0; i <= s.size() - t.size(); ++i) { - bool poss = true; - for (int j = 0; j < t.size(); ++j) - if (s[i+j] == t[j]) { - poss = false; - break; - } - - if (poss) - ans++; - } - - cout << ans << ende; - return 0; + ios::sync_with_stdio(0); + cin.tie(0); + + string s, t; cin >> s >> t; + int ans = 0; + for (int i = 0; i <= s.size() - t.size(); ++i) { + bool poss = true; + for (int j = 0; j < t.size(); ++j) + if (s[i+j] == t[j]) { + poss = false; + break; + } + + if (poss) + ans++; + } + + cout << ans << ende; + return 0; } diff --git a/contests/SBC18/F.cpp b/contests/SBC18/F.cpp index bdfeece..350b11f 100644 --- a/contests/SBC18/F.cpp +++ b/contests/SBC18/F.cpp @@ -28,51 +28,51 @@ vector<Show> v; int dp[1010][3010]; int solve(int i, int mask) { - if (i == N) { - if (mask == (1 << S) - 1) - return 0; - return -inf; - } - - if (dp[i][mask] != -1) - return dp[i][mask]; - - int op1 = solve(v[i].nxt, mask | (1 << v[i].s)) + v[i].o; - int op2 = solve(i + 1, mask); - return dp[i][mask] = max(op1, op2); + if (i == N) { + if (mask == (1 << S) - 1) + return 0; + return -inf; + } + + if (dp[i][mask] != -1) + return dp[i][mask]; + + int op1 = solve(v[i].nxt, mask | (1 << v[i].s)) + v[i].o; + int op2 = solve(i + 1, mask); + return dp[i][mask] = max(op1, op2); } int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n; cin >> n; - S = n; - for (int i = 0; i < n; ++i) { - int m; cin >> m; - for (int j = 0; j < m; ++j) { - int ii, ff, oo; cin >> ii >> ff >> oo; - v.pb({ii, ff, oo, i, -1}); + ios::sync_with_stdio(0); + cin.tie(0); + + int n; cin >> n; + S = n; + for (int i = 0; i < n; ++i) { + int m; cin >> m; + for (int j = 0; j < m; ++j) { + int ii, ff, oo; cin >> ii >> ff >> oo; + v.pb({ii, ff, oo, i, -1}); + } + } + + sort(all(v), [](Show a, Show b) { + return a.i < b.i; + }); + + N = v.size(); + for (int i = 0; i < N; ++i) { + for (int j = i + 1; j < N; ++j) + if (v[j].i >= v[i].f) { + v[i].nxt = j; + break; + } + + if (v[i].nxt == -1) + v[i].nxt = N; } - } - - sort(all(v), [](Show a, Show b) { - return a.i < b.i; - }); - - N = v.size(); - for (int i = 0; i < N; ++i) { - for (int j = i + 1; j < N; ++j) - if (v[j].i >= v[i].f) { - v[i].nxt = j; - break; - } - - if (v[i].nxt == -1) - v[i].nxt = N; - } - - mset(dp, -1); - cout << max(-1, solve(0, 0)) << ende; - return 0; + + mset(dp, -1); + cout << max(-1, solve(0, 0)) << ende; + return 0; } diff --git a/contests/SBC18/G.cpp b/contests/SBC18/G.cpp index 6ff4450..966d458 100644 --- a/contests/SBC18/G.cpp +++ b/contests/SBC18/G.cpp @@ -23,115 +23,115 @@ using ii = pair<int,int>; using iii = pair<ii,int>; struct Dinic { - struct Edge { int u, f, c, r; }; + struct Edge { int u, f, c, r; }; - int N; - vector<int> depth, start; - vector<vector<Edge>> graph; + int N; + vector<int> depth, start; + vector<vector<Edge>> graph; - Dinic(int N) : - N(N), depth(N), start(N), graph(N) {} + Dinic(int N) : + N(N), depth(N), start(N), graph(N) {} - void add_edge(int u, int v, int c) { - Edge forw = { v, 0, c, (int) graph[v].size() }; - Edge back = { u, 0, 0, (int) graph[u].size() }; - graph[u].pb(forw); - graph[v].pb(back); - } + void add_edge(int u, int v, int c) { + Edge forw = { v, 0, c, (int) graph[v].size() }; + Edge back = { u, 0, 0, (int) graph[u].size() }; + graph[u].pb(forw); + graph[v].pb(back); + } - bool bfs(int s, int t) { - queue<int> Q; - Q.push(s); + bool bfs(int s, int t) { + queue<int> Q; + Q.push(s); - fill(all(depth), -1); - depth[s] = 0; + fill(all(depth), -1); + depth[s] = 0; - while (!Q.empty()) { - int v = Q.front(); Q.pop(); + while (!Q.empty()) { + int v = Q.front(); Q.pop(); - for (auto i : graph[v]) - if (depth[i.u] == -1 && i.f < i.c) { - depth[i.u] = depth[v] + 1; - Q.push(i.u); + for (auto i : graph[v]) + if (depth[i.u] == -1 && i.f < i.c) { + depth[i.u] = depth[v] + 1; + Q.push(i.u); + } } - } - return depth[t] != -1; - } + return depth[t] != -1; + } - int dfs(int s, int t, int f) { - if (s == t) return f; + int dfs(int s, int t, int f) { + if (s == t) return f; - for ( ; start[s] < graph[s].size(); ++start[s]) { - Edge &e = graph[s][start[s]]; + for ( ; start[s] < graph[s].size(); ++start[s]) { + Edge &e = graph[s][start[s]]; - if (depth[e.u] == depth[s] + 1 && e.f < e.c) { - int min_f = dfs(e.u, t, min(f, e.c - e.f)); + if (depth[e.u] == depth[s] + 1 && e.f < e.c) { + int min_f = dfs(e.u, t, min(f, e.c - e.f)); - if (min_f > 0) { - e.f += min_f; - graph[e.u][e.r].f -= min_f; - return min_f; + if (min_f > 0) { + e.f += min_f; + graph[e.u][e.r].f -= min_f; + return min_f; + } + } } - } + + return 0; } - return 0; - } - - int run(int s, int t) { - int ans = 0; - while (bfs(s, t)) { - fill(all(start), 0); - while (int flow = dfs(s, t, inf)) - ans += flow; + int run(int s, int t) { + int ans = 0; + while (bfs(s, t)) { + fill(all(start), 0); + while (int flow = dfs(s, t, inf)) + ans += flow; + } + return ans; } - return ans; - } }; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int p, r, c; cin >> p >> r >> c; - vector<int> vp(p); - vector<int> vr(r); - - int sum = 0; - for (auto &i : vp) { - cin >> i; - sum += i; - } - - for (auto &i : vr) cin >> i; - - vector<iii> v(c); - for (int i = 0; i < c; ++i) { - int a, b, x; cin >> a >> b >> x; - v[i] = {{a, b}, x}; - } - - int L = 0, R = 1001000; - for (int i = 0; i < 30; ++i) { - int m = (L + R) / 2; - - Dinic dinic(r + p + 5); - for (int j = 0; j < r; ++j) - dinic.add_edge(0, j + 1, vr[j]); - for (int j = 0; j < p; ++j) - dinic.add_edge(j + 1 + r, r + p + 4, vp[j]); - - for (int j = 0; j < c; ++j) - if (v[j].se <= m) - dinic.add_edge(v[j].fi.se, v[j].fi.fi + r, inf); - - if (dinic.run(0, r + p + 4) < sum) - L = m; - else - R= m; - } - - cout << ((R > 1000100) ? -1 : R) << ende; - return 0; + ios::sync_with_stdio(0); + cin.tie(0); + + int p, r, c; cin >> p >> r >> c; + vector<int> vp(p); + vector<int> vr(r); + + int sum = 0; + for (auto &i : vp) { + cin >> i; + sum += i; + } + + for (auto &i : vr) cin >> i; + + vector<iii> v(c); + for (int i = 0; i < c; ++i) { + int a, b, x; cin >> a >> b >> x; + v[i] = {{a, b}, x}; + } + + int L = 0, R = 1001000; + for (int i = 0; i < 30; ++i) { + int m = (L + R) / 2; + + Dinic dinic(r + p + 5); + for (int j = 0; j < r; ++j) + dinic.add_edge(0, j + 1, vr[j]); + for (int j = 0; j < p; ++j) + dinic.add_edge(j + 1 + r, r + p + 4, vp[j]); + + for (int j = 0; j < c; ++j) + if (v[j].se <= m) + dinic.add_edge(v[j].fi.se, v[j].fi.fi + r, inf); + + if (dinic.run(0, r + p + 4) < sum) + L = m; + else + R= m; + } + + cout << ((R > 1000100) ? -1 : R) << ende; + return 0; } diff --git a/contests/SBC18/I.cpp b/contests/SBC18/I.cpp index aa2d90a..57c8d66 100644 --- a/contests/SBC18/I.cpp +++ b/contests/SBC18/I.cpp @@ -22,45 +22,45 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - int n, m; cin >> n >> m; - int l; cin >> l; - int acc = 0; + int n, m; cin >> n >> m; + int l; cin >> l; + int acc = 0; - vector<int> lamp(m); - for (int i = 0; i < l; ++i) { - int x; cin >> x; x--; - lamp[x] = 1; - acc++; - } + vector<int> lamp(m); + for (int i = 0; i < l; ++i) { + int x; cin >> x; x--; + lamp[x] = 1; + acc++; + } - vector<vector<int>> inte(n); - for (int i = 0; i < n; ++i) { - int k; cin >> k; - for (int j = 0; j < k; ++j) { - int x; cin >> x; x--; - inte[i].pb(x); + vector<vector<int>> inte(n); + for (int i = 0; i < n; ++i) { + int k; cin >> k; + for (int j = 0; j < k; ++j) { + int x; cin >> x; x--; + inte[i].pb(x); + } } - } - if (acc == 0) - return cout << 0 << ende, 0; + if (acc == 0) + return cout << 0 << ende, 0; - int ans = 0; - for (int i = 0; i < 2; ++i) { - for (int j = 0; j < n; ++j) { - ans++; - for (auto k : inte[j]) - if (lamp[k]) { acc--; lamp[k] = 0; } - else { acc++; lamp[k] = 1; } + int ans = 0; + for (int i = 0; i < 2; ++i) { + for (int j = 0; j < n; ++j) { + ans++; + for (auto k : inte[j]) + if (lamp[k]) { acc--; lamp[k] = 0; } + else { acc++; lamp[k] = 1; } - if (acc == 0) - return cout << ans << ende, 0; + if (acc == 0) + return cout << ans << ende, 0; + } } - } - cout << -1 << ende; - return 0; + cout << -1 << ende; + return 0; } diff --git a/contests/SBC18/J.cpp b/contests/SBC18/J.cpp index 951df4e..8a100cf 100644 --- a/contests/SBC18/J.cpp +++ b/contests/SBC18/J.cpp @@ -28,36 +28,36 @@ double dist[MAX][MAX]; double dp[MAX][1 << MAXT]; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - cout << setprecision(5) << fixed; + ios::sync_with_stdio(0); + cin.tie(0); + cout << setprecision(5) << fixed; - int n, k; cin >> n >> k; - vector<dd> v(n); - for (int i = 0; i < n; ++i) - cin >> v[i].fi >> v[i].se; + int n, k; cin >> n >> k; + vector<dd> v(n); + for (int i = 0; i < n; ++i) + cin >> v[i].fi >> v[i].se; + + for (int i = 0; i < n; ++i) + for (int j = 0; j < n; ++j) + dist[i][j] = hypot(v[i].fi - v[j].fi, v[i].se - v[j].se); - for (int i = 0; i < n; ++i) - for (int j = 0; j < n; ++j) - dist[i][j] = hypot(v[i].fi - v[j].fi, v[i].se - v[j].se); + fill(dp[0], dp[0] + (MAX * (1 << MAXT)), 1e9); + for (int i = 0; i < k; ++i) + dp[i][1 << i] = 0; - fill(dp[0], dp[0] + (MAX * (1 << MAXT)), 1e9); - for (int i = 0; i < k; ++i) - dp[i][1 << i] = 0; + for (int mask = 1; mask < (1 << k); ++mask) { + for (int i = 0; i < n; ++i) + for (int ss = mask; ss > 0; ss = (ss - 1) & mask) + dp[i][mask] = min(dp[i][mask], dp[i][ss] + dp[i][mask ^ ss]); - for (int mask = 1; mask < (1 << k); ++mask) { - for (int i = 0; i < n; ++i) - for (int ss = mask; ss > 0; ss = (ss - 1) & mask) - dp[i][mask] = min(dp[i][mask], dp[i][ss] + dp[i][mask ^ ss]); + for (int i = 0; i < n; ++i) + for (int j = k; j < n; ++j) + dp[j][mask] = min(dp[j][mask], dp[i][mask] + dist[i][j]); + } + double ans = 1e9; for (int i = 0; i < n; ++i) - for (int j = k; j < n; ++j) - dp[j][mask] = min(dp[j][mask], dp[i][mask] + dist[i][j]); - } - - double ans = 1e9; - for (int i = 0; i < n; ++i) - ans = min(ans, dp[i][(1 << k) - 1]); - cout << ans << ende; - return 0; + ans = min(ans, dp[i][(1 << k) - 1]); + cout << ans << ende; + return 0; } diff --git a/contests/SBC18/L.cpp b/contests/SBC18/L.cpp index 8444e6f..d50306a 100644 --- a/contests/SBC18/L.cpp +++ b/contests/SBC18/L.cpp @@ -28,77 +28,77 @@ int par[MAX][MLOG]; vector<int> graph[MAX]; void dfs(int x, int p) { - par[x][0] = p; + par[x][0] = p; - if (p != -1) - h[x] = h[p] + 1; + if (p != -1) + h[x] = h[p] + 1; - for (int i = 1; i < MLOG; ++i) - if (par[x][i-1] != -1) - par[x][i] = par[par[x][i-1]][i-1]; + for (int i = 1; i < MLOG; ++i) + if (par[x][i-1] != -1) + par[x][i] = par[par[x][i-1]][i-1]; - for (auto i : graph[x]) - if (i != p) - dfs(i, x); + for (auto i : graph[x]) + if (i != p) + dfs(i, x); } int lca(int a, int b) { - if (h[a] < h[b]) - swap(a, b); + if (h[a] < h[b]) + swap(a, b); - for (int i = MLOG - 1; i >= 0; --i) - if (par[a][i] != -1 && h[par[a][i]] >= h[b]) - a = par[a][i]; + for (int i = MLOG - 1; i >= 0; --i) + if (par[a][i] != -1 && h[par[a][i]] >= h[b]) + a = par[a][i]; - if (a == b) - return a; + if (a == b) + return a; - for (int i = MLOG - 1; i >= 0; --i) - if (par[a][i] != -1 && par[a][i] != par[b][i]) { - a = par[a][i]; - b = par[b][i]; - } + for (int i = MLOG - 1; i >= 0; --i) + if (par[a][i] != -1 && par[a][i] != par[b][i]) { + a = par[a][i]; + b = par[b][i]; + } - return par[a][0]; + return par[a][0]; } int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n, q; cin >> n >> q; - for (int i = 0; i < n - 1; ++i) { - int a, b; cin >> a >> b; a--, b--; - graph[a].pb(b); - graph[b].pb(a); - } - - mset(h, 0); - mset(par, -1); - dfs(0, -1); - - for (int i = 0; i < q; ++i) { - int a, b, c, d; - cin >> a >> b >> c >> d; a--, b--, c--, d--; - vector<int> v = { lca(a, c), lca(a, d), lca(b, c), lca(b, d) }; - - sort(all(v), [&](int a, int b) { - return h[a] > h[b]; - }); - - if (v[0] == v[1]) { - bool t1 = ((lca(a, v[0]) == v[0] || lca(b, v[0]) == v[0]) && h[lca(a, b)] <= h[v[0]]); - bool t2 = ((lca(c, v[0]) == v[0] || lca(d, v[0]) == v[0]) && h[lca(c, d)] <= h[v[0]]); - cout << (t1 && t2) << ende; - } else { - int aux = lca(v[0], v[1]); - - if (aux == v[0] || aux == v[1]) - cout << abs(h[v[0]] - h[v[1]]) + 1 << ende; - else - cout << (h[v[0]] - h[aux] + 1) + (h[v[1]] - h[aux] + 1) - 1 << ende; + ios::sync_with_stdio(0); + cin.tie(0); + + int n, q; cin >> n >> q; + for (int i = 0; i < n - 1; ++i) { + int a, b; cin >> a >> b; a--, b--; + graph[a].pb(b); + graph[b].pb(a); + } + + mset(h, 0); + mset(par, -1); + dfs(0, -1); + + for (int i = 0; i < q; ++i) { + int a, b, c, d; + cin >> a >> b >> c >> d; a--, b--, c--, d--; + vector<int> v = { lca(a, c), lca(a, d), lca(b, c), lca(b, d) }; + + sort(all(v), [&](int a, int b) { + return h[a] > h[b]; + }); + + if (v[0] == v[1]) { + bool t1 = ((lca(a, v[0]) == v[0] || lca(b, v[0]) == v[0]) && h[lca(a, b)] <= h[v[0]]); + bool t2 = ((lca(c, v[0]) == v[0] || lca(d, v[0]) == v[0]) && h[lca(c, d)] <= h[v[0]]); + cout << (t1 && t2) << ende; + } else { + int aux = lca(v[0], v[1]); + + if (aux == v[0] || aux == v[1]) + cout << abs(h[v[0]] - h[v[1]]) + 1 << ende; + else + cout << (h[v[0]] - h[aux] + 1) + (h[v[1]] - h[aux] + 1) - 1 << ende; + } } - } - return 0; + return 0; } diff --git a/contests/SBC19/A.cpp b/contests/SBC19/A.cpp index e8be3f8..e5bad76 100644 --- a/contests/SBC19/A.cpp +++ b/contests/SBC19/A.cpp @@ -21,12 +21,12 @@ using ll = long long; using ii = pair<int,int>; struct Circle { - int x, y, r; - Circle() {} + int x, y, r; + Circle() {} - bool inter(Circle c) { - return (c.x - x)*(c.x - x) + (c.y - y)*(c.y - y) <= (c.r + r)*(c.r + r); - } + bool inter(Circle c) { + return (c.x - x)*(c.x - x) + (c.y - y)*(c.y - y) <= (c.r + r)*(c.r + r); + } }; #define R 1001 @@ -38,50 +38,50 @@ int par[MAX]; int rnk[MAX]; int find_set(int x) { - if (par[x] != x) - par[x] = find_set(par[x]); - return par[x]; + if (par[x] != x) + par[x] = find_set(par[x]); + return par[x]; } void union_set(int a, int b) { - a = find_set(a); - b = find_set(b); + a = find_set(a); + b = find_set(b); - if (a == b) return; - if (rnk[a] < rnk[b]) swap(a, b); - if (rnk[a] == rnk[b]) rnk[a]++; - par[b] = a; + if (a == b) return; + if (rnk[a] < rnk[b]) swap(a, b); + if (rnk[a] == rnk[b]) rnk[a]++; + par[b] = a; } int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int m, n, k; cin >> m >> n >> k; - vector<Circle> v(k); - - for (auto &i : v) - cin >> i.x >> i.y >> i.r; - - iota(par, par + MAX, 0); - for (int i = 0; i < k; ++i) { - for (int j = 0; j < k; ++j) - if (v[i].inter(v[j])) - union_set(i, j); - - if (v[i].x + v[i].r >= m) union_set(R, i); - if (v[i].x - v[i].r <= 0) union_set(L, i); - if (v[i].y + v[i].r >= n) union_set(U, i); - if (v[i].y - v[i].r <= 0) union_set(D, i); - } - - if (find_set(R) == find_set(L) || - find_set(L) == find_set(D) || - find_set(U) == find_set(D) || - find_set(R) == find_set(U)) - cout << "N" << ende; - else - cout << "S" << ende; - - return 0; + ios::sync_with_stdio(0); + cin.tie(0); + + int m, n, k; cin >> m >> n >> k; + vector<Circle> v(k); + + for (auto &i : v) + cin >> i.x >> i.y >> i.r; + + iota(par, par + MAX, 0); + for (int i = 0; i < k; ++i) { + for (int j = 0; j < k; ++j) + if (v[i].inter(v[j])) + union_set(i, j); + + if (v[i].x + v[i].r >= m) union_set(R, i); + if (v[i].x - v[i].r <= 0) union_set(L, i); + if (v[i].y + v[i].r >= n) union_set(U, i); + if (v[i].y - v[i].r <= 0) union_set(D, i); + } + + if (find_set(R) == find_set(L) || + find_set(L) == find_set(D) || + find_set(U) == find_set(D) || + find_set(R) == find_set(U)) + cout << "N" << ende; + else + cout << "S" << ende; + + return 0; } diff --git a/contests/SBC19/B.cpp b/contests/SBC19/B.cpp index db754cb..5c86b4a 100644 --- a/contests/SBC19/B.cpp +++ b/contests/SBC19/B.cpp @@ -20,13 +20,13 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - int n; cin >> n; - vector<int> v(n); - for (auto &i : v) cin >> i; + int n; cin >> n; + vector<int> v(n); + for (auto &i : v) cin >> i; - cout << ((*max_element(all(v)) == v[0]) ? "S" : "N") << ende; - return 0; + cout << ((*max_element(all(v)) == v[0]) ? "S" : "N") << ende; + return 0; } diff --git a/contests/SBC19/D.cpp b/contests/SBC19/D.cpp index 08b1b28..eedf1ef 100644 --- a/contests/SBC19/D.cpp +++ b/contests/SBC19/D.cpp @@ -26,45 +26,45 @@ int sz[MAX]; vector<int> graph[MAX]; int dfs(int x, int p = -1) { - par[x] = p; + par[x] = p; - int max_size = 0; - for (auto i : graph[x]) - if (i != p) { - int isize = dfs(i, x); - if (isize > max_size) - max_size = isize, heavy[x] = i; - } + int max_size = 0; + for (auto i : graph[x]) + if (i != p) { + int isize = dfs(i, x); + if (isize > max_size) + max_size = isize, heavy[x] = i; + } - return max_size + 1; + return max_size + 1; } void decompose(int x, int h = 0) { - sz[h]++; + sz[h]++; - if (heavy[x] != -1) - decompose(heavy[x], h); - for (auto i : graph[x]) - if (i != par[x] && i != heavy[x]) - decompose(i, i); + if (heavy[x] != -1) + decompose(heavy[x], h); + for (auto i : graph[x]) + if (i != par[x] && i != heavy[x]) + decompose(i, i); } int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - int n, k; cin >> n >> k; - for (int i = 2; i <= n; ++i) { - int x; cin >> x; - graph[x-1].pb(i-1); - graph[i-1].pb(x-1); - } + int n, k; cin >> n >> k; + for (int i = 2; i <= n; ++i) { + int x; cin >> x; + graph[x-1].pb(i-1); + graph[i-1].pb(x-1); + } - mset(heavy, -1); - dfs(0); - decompose(0); + mset(heavy, -1); + dfs(0); + decompose(0); - sort(sz, sz + MAX); - cout << accumulate(sz + MAX - k, sz + MAX, 0) << ende; - return 0; + sort(sz, sz + MAX); + cout << accumulate(sz + MAX - k, sz + MAX, 0) << ende; + return 0; } diff --git a/contests/SBC19/F.cpp b/contests/SBC19/F.cpp index 6e6fc57..8492140 100644 --- a/contests/SBC19/F.cpp +++ b/contests/SBC19/F.cpp @@ -27,40 +27,40 @@ int N = 100001; int tree[MAX*4], cnt[MAX*4]; void update(int i, int j, int val, - int node = 1, int l = 0, int r = N - 1) { - if (l > r || l > j || r < i) return; - - if (i <= l && r <= j) - tree[node] += val; - else { - int m = (l + r) / 2; - update(i, j, val, left(node), l, m); - update(i, j, val, right(node), m + 1, r); - } - - if (tree[node]) - cnt[node] = r - l + 1; - else { - cnt[node] = 0; - if (l < r) cnt[node] = cnt[left(node)] + cnt[right(node)]; - } + int node = 1, int l = 0, int r = N - 1) { + if (l > r || l > j || r < i) return; + + if (i <= l && r <= j) + tree[node] += val; + else { + int m = (l + r) / 2; + update(i, j, val, left(node), l, m); + update(i, j, val, right(node), m + 1, r); + } + + if (tree[node]) + cnt[node] = r - l + 1; + else { + cnt[node] = 0; + if (l < r) cnt[node] = cnt[left(node)] + cnt[right(node)]; + } } struct Segment { - int x1, y1, x2, y2; + int x1, y1, x2, y2; - Segment() {} - Segment(int x1, int y1, int x2, int y2) : - x1(x1), y1(y1), x2(x2), y2(y2) {} + Segment() {} + Segment(int x1, int y1, int x2, int y2) : + x1(x1), y1(y1), x2(x2), y2(y2) {} }; struct Event { - int x1, x2, y; - int beg; + int x1, x2, y; + int beg; - Event() {} - Event(int x1, int x2, int y, int b) : - x1(x1), x2(x2), y(y), beg(b) {} + Event() {} + Event(int x1, int x2, int y, int b) : + x1(x1), x2(x2), y(y), beg(b) {} }; Segment rect; @@ -68,55 +68,55 @@ vector<Event> E; vector<Segment> ss; double calc(int m, ll p) { - mset(tree, 0); - mset(cnt, 0); - - int k = 0; - for (int i = 0; i < ss.size(); ++i) { - E[k++] = Event(ss[i].x1 - m, ss[i].x2 + m, ss[i].y1 - m, 1); - E[k++] = Event(ss[i].x1 - m, ss[i].x2 + m, ss[i].y2 + m, -1); - } - - sort(all(E), [&](const Event &a, const Event &b) { - return a.y < b.y; - }); - - k = 0; - ll ans = 0; - for (int i = rect.y1; i < rect.y2; ++i) { - for (; k < E.size() && E[k].y <= i; ++k) - if (E[k].x1 <= rect.x2 - 1 && E[k].x2 >= rect.x1) - update(max(rect.x1, E[k].x1), min(rect.x2 - 1, E[k].x2 - 1), E[k].beg); - ans += (ll) cnt[1]; - } - - return (ans*100) < p * ((ll) ((ll) rect.x2 - rect.x1) * ((ll) rect.y2 - rect.y1)); + mset(tree, 0); + mset(cnt, 0); + + int k = 0; + for (int i = 0; i < ss.size(); ++i) { + E[k++] = Event(ss[i].x1 - m, ss[i].x2 + m, ss[i].y1 - m, 1); + E[k++] = Event(ss[i].x1 - m, ss[i].x2 + m, ss[i].y2 + m, -1); + } + + sort(all(E), [&](const Event &a, const Event &b) { + return a.y < b.y; + }); + + k = 0; + ll ans = 0; + for (int i = rect.y1; i < rect.y2; ++i) { + for (; k < E.size() && E[k].y <= i; ++k) + if (E[k].x1 <= rect.x2 - 1 && E[k].x2 >= rect.x1) + update(max(rect.x1, E[k].x1), min(rect.x2 - 1, E[k].x2 - 1), E[k].beg); + ans += (ll) cnt[1]; + } + + return (ans*100) < p * ((ll) ((ll) rect.x2 - rect.x1) * ((ll) rect.y2 - rect.y1)); } int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); + + int n; cin >> n; + E.resize(2*n); + ss.resize(n); - int n; cin >> n; - E.resize(2*n); - ss.resize(n); + for (auto &i : ss) { + int x1, y1, x2, y2; + cin >> x1 >> y1 >> x2 >> y2; + i = Segment(min(x1,x2), min(y1,y2), max(x1,x2), max(y1,y2)); + } - for (auto &i : ss) { + ll p; cin >> p; int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2; - i = Segment(min(x1,x2), min(y1,y2), max(x1,x2), max(y1,y2)); - } - - ll p; cin >> p; - int x1, y1, x2, y2; - cin >> x1 >> y1 >> x2 >> y2; - rect = Segment(min(x1,x2), min(y1,y2), max(x1,x2), max(y1,y2)); + rect = Segment(min(x1,x2), min(y1,y2), max(x1,x2), max(y1,y2)); - int l = 0, r = 101010; - for (int b = r / 2; b >= 1; b /= 2) - while (calc(l + b, p)) - l += b; + int l = 0, r = 101010; + for (int b = r / 2; b >= 1; b /= 2) + while (calc(l + b, p)) + l += b; - cout << l + 1 << ende; - return 0; + cout << l + 1 << ende; + return 0; } diff --git a/contests/SBC19/G.cpp b/contests/SBC19/G.cpp index 2c8ce39..3c614e3 100644 --- a/contests/SBC19/G.cpp +++ b/contests/SBC19/G.cpp @@ -20,104 +20,104 @@ using ll = long long; using ii = pair<int,int>; struct MinCostMaxFlow { - struct Edge { - int u, v, cap; - double cost; - }; - - vector<Edge> edges; - vector<vector<int>> adj; - vector<int> vis, par, ind; - vector<double> dist; - - MinCostMaxFlow(int N) : - vis(N), dist(N), par(N), ind(N), adj(N) {} - - void add_edge(int u, int v, int cap, double cost) { - adj[u].pb(edges.size()); - edges.pb({ u, v, cap, cost }); - - adj[v].pb(edges.size()); - edges.pb({ v, u, 0, -cost }); - } - - bool spfa(int s, int t) { - fill(all(dist), inf); - dist[s] = 0; - - queue<int> Q; - Q.push(s); - - while (!Q.empty()) { - int u = Q.front(); Q.pop(); - vis[u] = 0; - - for (auto i : adj[u]) { - Edge &e = edges[i]; - int v = e.v; - - if (e.cap > 0 && dist[v] > dist[u] + e.cost) { - dist[v] = dist[u] + e.cost; - par[v] = u; - ind[v] = i; - - if (!vis[v]) { - Q.push(v); - vis[v] = 1; - } + struct Edge { + int u, v, cap; + double cost; + }; + + vector<Edge> edges; + vector<vector<int>> adj; + vector<int> vis, par, ind; + vector<double> dist; + + MinCostMaxFlow(int N) : + vis(N), dist(N), par(N), ind(N), adj(N) {} + + void add_edge(int u, int v, int cap, double cost) { + adj[u].pb(edges.size()); + edges.pb({ u, v, cap, cost }); + + adj[v].pb(edges.size()); + edges.pb({ v, u, 0, -cost }); + } + + bool spfa(int s, int t) { + fill(all(dist), inf); + dist[s] = 0; + + queue<int> Q; + Q.push(s); + + while (!Q.empty()) { + int u = Q.front(); Q.pop(); + vis[u] = 0; + + for (auto i : adj[u]) { + Edge &e = edges[i]; + int v = e.v; + + if (e.cap > 0 && dist[v] > dist[u] + e.cost) { + dist[v] = dist[u] + e.cost; + par[v] = u; + ind[v] = i; + + if (!vis[v]) { + Q.push(v); + vis[v] = 1; + } + } + } } - } + + return dist[t] < inf; } - return dist[t] < inf; - } - - void run(int s, int t) { - double min_cost = 0; - int max_flow = 0; - - while (spfa(s, t)) { - int flow = inf; - for (int i = t; i != s; i = par[i]) - flow = min(flow, edges[ind[i]].cap); - - for (int i = t; i != s; i = par[i]) { - edges[ind[i] ].cap -= flow; - edges[ind[i]^1].cap += flow; - } - - min_cost += flow * dist[t]; - max_flow += flow; + void run(int s, int t) { + double min_cost = 0; + int max_flow = 0; + + while (spfa(s, t)) { + int flow = inf; + for (int i = t; i != s; i = par[i]) + flow = min(flow, edges[ind[i]].cap); + + for (int i = t; i != s; i = par[i]) { + edges[ind[i] ].cap -= flow; + edges[ind[i]^1].cap += flow; + } + + min_cost += flow * dist[t]; + max_flow += flow; + } } - } }; int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - int n; cin >> n; + int n; cin >> n; - MinCostMaxFlow mcmf(2*n + 2); - for (int i = 0; i < n; ++i) { - mcmf.add_edge(0, i+1, 1, 0); - for (int j = 0; j < n; ++j) { - double x; cin >> x; - mcmf.add_edge(i+1, j+1+n, 1, -log(x)); + MinCostMaxFlow mcmf(2*n + 2); + for (int i = 0; i < n; ++i) { + mcmf.add_edge(0, i+1, 1, 0); + for (int j = 0; j < n; ++j) { + double x; cin >> x; + mcmf.add_edge(i+1, j+1+n, 1, -log(x)); + } + mcmf.add_edge(i+n+1, 2*n+1, 1, 0); } - mcmf.add_edge(i+n+1, 2*n+1, 1, 0); - } - - vector<int> ans(n); - mcmf.run(0, 2*n+1); - for (int i = 0; i < mcmf.edges.size(); ++i) - if (mcmf.edges[i].u > 0 && mcmf.edges[i].u <= n && - mcmf.edges[i].v >= n+1 && mcmf.edges[i].v < 2*n+1 && - mcmf.edges[i].cap == 0) - ans[mcmf.edges[i].v-(n+1)] = mcmf.edges[i].u; - - for (auto i : ans) - cout << i << " "; - cout << ende; - return 0; + + vector<int> ans(n); + mcmf.run(0, 2*n+1); + for (int i = 0; i < mcmf.edges.size(); ++i) + if (mcmf.edges[i].u > 0 && mcmf.edges[i].u <= n && + mcmf.edges[i].v >= n+1 && mcmf.edges[i].v < 2*n+1 && + mcmf.edges[i].cap == 0) + ans[mcmf.edges[i].v-(n+1)] = mcmf.edges[i].u; + + for (auto i : ans) + cout << i << " "; + cout << ende; + return 0; } diff --git a/contests/SBC19/H.cpp b/contests/SBC19/H.cpp index 8cad16d..5a1b11a 100644 --- a/contests/SBC19/H.cpp +++ b/contests/SBC19/H.cpp @@ -20,14 +20,14 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - int v, n; cin >> v >> n; - for (int i = 1; i < 10; ++i) { - if (i > 1) cout << " "; - cout << ((v*n*i) - 1) / 10 + 1; - } - cout << ende; - return 0; + int v, n; cin >> v >> n; + for (int i = 1; i < 10; ++i) { + if (i > 1) cout << " "; + cout << ((v*n*i) - 1) / 10 + 1; + } + cout << ende; + return 0; } diff --git a/contests/SBC19/I.cpp b/contests/SBC19/I.cpp index 0f929cb..a752efc 100644 --- a/contests/SBC19/I.cpp +++ b/contests/SBC19/I.cpp @@ -25,61 +25,61 @@ int dist[2][MAX][MAX]; struct Query { int idx, a, b, k, t; }; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n, r; cin >> n >> r; - vector<ii> T[2]; - for (int i = 0; i < n; ++i) { - int x; cin >> x; - T[0].pb({x, i}); - T[1].pb({x, i}); - dist[0][i][i] = dist[1][i][i] = 0; - } - - sort(all(T[0])); - sort(rall(T[1])); - - mset(dist, inf); - for (int i = 0; i < r; ++i) { - int a, b, c; cin >> a >> b >> c; a--, b--; - dist[0][a][b] = dist[1][a][b] = c; - dist[0][b][a] = dist[1][b][a] = c; - } - - int q; cin >> q; - vector<Query> Q(q); - for (int i = 0; i < q; ++i) { - int a, b, k, t; cin >> a >> b >> k >> t; a--, b--; - Q[i] = Query{i, a, b, k, t}; - } - - sort(all(Q), [&](Query a, Query b) { - if (a.t == b.t) return a.k < b.k; - return a.t < b.t; - }); - - int curr = 0; - vector<int> ans(q); - for (int tt = 0; tt <= 1; ++tt) { - int kk = 1; - for (int k = 0; k < n; ++k) { - if (k && T[tt][k].fi != T[tt][k-1].fi) { - for (; curr < q && Q[curr].k == kk && Q[curr].t == tt; ++curr) - ans[Q[curr].idx] = dist[tt][Q[curr].a][Q[curr].b]; - kk++; - } - - for (int i = 0; i < n; ++i) - for (int j = 0; j < n; ++j) - dist[tt][i][j] = min(dist[tt][i][j], dist[tt][i][T[tt][k].se] + dist[tt][T[tt][k].se][j]); + ios::sync_with_stdio(0); + cin.tie(0); + + int n, r; cin >> n >> r; + vector<ii> T[2]; + for (int i = 0; i < n; ++i) { + int x; cin >> x; + T[0].pb({x, i}); + T[1].pb({x, i}); + dist[0][i][i] = dist[1][i][i] = 0; } - for (; curr < q && Q[curr].t == tt; ++curr) - ans[Q[curr].idx] = dist[tt][Q[curr].a][Q[curr].b]; - } + sort(all(T[0])); + sort(rall(T[1])); - for (auto i : ans) - cout << ((i == inf) ? -1 : i) << ende; - return 0; + mset(dist, inf); + for (int i = 0; i < r; ++i) { + int a, b, c; cin >> a >> b >> c; a--, b--; + dist[0][a][b] = dist[1][a][b] = c; + dist[0][b][a] = dist[1][b][a] = c; + } + + int q; cin >> q; + vector<Query> Q(q); + for (int i = 0; i < q; ++i) { + int a, b, k, t; cin >> a >> b >> k >> t; a--, b--; + Q[i] = Query{i, a, b, k, t}; + } + + sort(all(Q), [&](Query a, Query b) { + if (a.t == b.t) return a.k < b.k; + return a.t < b.t; + }); + + int curr = 0; + vector<int> ans(q); + for (int tt = 0; tt <= 1; ++tt) { + int kk = 1; + for (int k = 0; k < n; ++k) { + if (k && T[tt][k].fi != T[tt][k-1].fi) { + for (; curr < q && Q[curr].k == kk && Q[curr].t == tt; ++curr) + ans[Q[curr].idx] = dist[tt][Q[curr].a][Q[curr].b]; + kk++; + } + + for (int i = 0; i < n; ++i) + for (int j = 0; j < n; ++j) + dist[tt][i][j] = min(dist[tt][i][j], dist[tt][i][T[tt][k].se] + dist[tt][T[tt][k].se][j]); + } + + for (; curr < q && Q[curr].t == tt; ++curr) + ans[Q[curr].idx] = dist[tt][Q[curr].a][Q[curr].b]; + } + + for (auto i : ans) + cout << ((i == inf) ? -1 : i) << ende; + return 0; } diff --git a/contests/SBC19/J.cpp b/contests/SBC19/J.cpp index ec4c5b8..0f7fda1 100644 --- a/contests/SBC19/J.cpp +++ b/contests/SBC19/J.cpp @@ -22,50 +22,50 @@ using ii = pair<int,int>; int cnt[20][300]; int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - int n, k; cin >> n >> k; k--; - vector<string> v(n); - for (int i = 0; i < n; ++i) { - cin >> v[i]; - for (auto j : v[i]) - cnt[i][j]++; + int n, k; cin >> n >> k; k--; + vector<string> v(n); + for (int i = 0; i < n; ++i) { + cin >> v[i]; + for (auto j : v[i]) + cnt[i][j]++; - if (cnt[i][v[i][0]] == 4 && i != k) - return cout << i + 1 << ende, 0; - } + if (cnt[i][v[i][0]] == 4 && i != k) + return cout << i + 1 << ende, 0; + } - string ord = "A23456789DQJK"; + string ord = "A23456789DQJK"; - cnt[k]['C']++; - int curr = k; - bool pode = false; - while (1) { - bool pass = false; - if (cnt[curr]['C'] && pode) { - cnt[curr]['C']--; - cnt[(curr+1)%n]['C']++; - pass = true; - pode = false; - } else if (!cnt[curr]['C'] || !pode) { - int mx = -1; - for (int i = 0; i < ord.size(); ++i) - if (cnt[curr][ord[i]] != 0 && (mx == -1 || cnt[curr][ord[i]] < cnt[curr][ord[mx]])) - mx = i; + cnt[k]['C']++; + int curr = k; + bool pode = false; + while (1) { + bool pass = false; + if (cnt[curr]['C'] && pode) { + cnt[curr]['C']--; + cnt[(curr+1)%n]['C']++; + pass = true; + pode = false; + } else if (!cnt[curr]['C'] || !pode) { + int mx = -1; + for (int i = 0; i < ord.size(); ++i) + if (cnt[curr][ord[i]] != 0 && (mx == -1 || cnt[curr][ord[i]] < cnt[curr][ord[mx]])) + mx = i; - cnt[curr][ord[mx]]--; - cnt[(curr+1)%n][ord[mx]]++; - } + cnt[curr][ord[mx]]--; + cnt[(curr+1)%n][ord[mx]]++; + } - if (!cnt[curr]['C']) - for (int i = 0; i < ord.size(); ++i) - if (cnt[curr][ord[i]] == 4) - return cout << curr + 1 << ende, 0; + if (!cnt[curr]['C']) + for (int i = 0; i < ord.size(); ++i) + if (cnt[curr][ord[i]] == 4) + return cout << curr + 1 << ende, 0; - if (!pass) pode = true; - curr = (curr+1)%n; - } + if (!pass) pode = true; + curr = (curr+1)%n; + } - return 0; + return 0; } diff --git a/contests/SBC19/L.cpp b/contests/SBC19/L.cpp index 04ad532..808eb68 100644 --- a/contests/SBC19/L.cpp +++ b/contests/SBC19/L.cpp @@ -20,11 +20,11 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - ll n; cin >> n; - cout << (1LL << __builtin_popcountll(n)) << ende; + ll n; cin >> n; + cout << (1LL << __builtin_popcountll(n)) << ende; - return 0; + return 0; } diff --git a/contests/SBC19/M.cpp b/contests/SBC19/M.cpp index 741935c..b57b2f7 100644 --- a/contests/SBC19/M.cpp +++ b/contests/SBC19/M.cpp @@ -20,31 +20,31 @@ using ll = long long; using ii = pair<int,int>; int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n, c, t; cin >> n >> c >> t; - vector<int> v(n); - for (auto &i : v) cin >> i; - - auto f = [&](int x) { - int memb = 0; - for (int i = 0, j = 0; i < n; i = j, ++memb) { - for (int sum = 0; j < n && (sum+v[j]-1)/t+1 <= x; ++j) - sum += v[j]; - if (i == j) - return false; + ios::sync_with_stdio(0); + cin.tie(0); + + int n, c, t; cin >> n >> c >> t; + vector<int> v(n); + for (auto &i : v) cin >> i; + + auto f = [&](int x) { + int memb = 0; + for (int i = 0, j = 0; i < n; i = j, ++memb) { + for (int sum = 0; j < n && (sum+v[j]-1)/t+1 <= x; ++j) + sum += v[j]; + if (i == j) + return false; + } + return (memb <= c); + }; + + int l = 1, r = (accumulate(all(v), 0) - 1) / t + 1; + for (int i = 0; i < 50; ++i) { + int m = (l + r) / 2; + if (!f(m)) l = m+1; + else r = m-1; } - return (memb <= c); - }; - - int l = 1, r = (accumulate(all(v), 0) - 1) / t + 1; - for (int i = 0; i < 50; ++i) { - int m = (l + r) / 2; - if (!f(m)) l = m+1; - else r = m-1; - } - - cout << l << ende; - return 0; + + cout << l << ende; + return 0; } diff --git a/gen_notebook b/gen_notebook index a596a40..0300dea 100755 --- a/gen_notebook +++ b/gen_notebook @@ -32,7 +32,7 @@ else rm latex_log.txt echo "PDF generated successfully: $output_name" else - rm $tex_file* + #rm $tex_file* echo "ERROR on LaTeX input file: check latex_log.txt" exit 1 fi diff --git a/misc/environment/template.cpp b/misc/environment/template.cpp index 1cc4ff5..862e421 100644 --- a/misc/environment/template.cpp +++ b/misc/environment/template.cpp @@ -2,6 +2,10 @@ #include <bits/stdc++.h> +#ifdef LOCAL +#include <local.h> +#endif + #define EPS 1e-6 #define MOD 1000000007 #define inf 0x3f3f3f3f @@ -18,12 +22,15 @@ using namespace std; -using ll = long long; -using ii = pair<int,int>; +using i64 = long long; +template <typename T> using p = pair<T,T>; + int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); + + - return 0; + return 0; } diff --git a/problems/a_simple_task.cpp b/problems/a_simple_task.cpp index d1d2ce9..331ad5d 100644 --- a/problems/a_simple_task.cpp +++ b/problems/a_simple_task.cpp @@ -1,152 +1,152 @@ /// A Simple Task #include <bits/stdc++.h> - + #define MAX 100001 #define EPS 1e-6 #define MOD 1000000007 #define inf 0x3f3f3f3f #define llinf 0x3f3f3f3f3f3f3f3f - + #define fi first #define se second #define sz size() #define pb push_back #define ende '\n' - + #define all(x) (x).begin(), (x).end() #define rall(x) (x).rbegin(), (x).rend() #define mset(x, y) memset(&x, (y), sizeof(x)) - + #define left(x) ((x << 1)) #define right(x) ((x << 1) + 1) - + using namespace std; - + typedef long long ll; typedef pair<int,int> ii; - + int N, q; int tree[4 * MAX][26], lazy[4 * MAX][26]; - + string s; - + void build(int node = 1, int a = 0, int b = N-1) { - if (a > b) - return; - - if (a == b) { - tree[node][s[a] - 'a'] = 1; - return; - } - - build(left(node), a, (a + b) / 2); - build(right(node), (a + b) / 2 + 1, b); - - for (int i = 0; i < 26; ++i) - tree[node][i] = tree[left(node)][i] + tree[right(node)][i]; + if (a > b) + return; + + if (a == b) { + tree[node][s[a] - 'a'] = 1; + return; + } + + build(left(node), a, (a + b) / 2); + build(right(node), (a + b) / 2 + 1, b); + + for (int i = 0; i < 26; ++i) + tree[node][i] = tree[left(node)][i] + tree[right(node)][i]; } - + void push(int let, int node, int a, int b, int val) { - tree[node][let] = (b - a + 1) * val; - - if (a != b) { - lazy[left(node)][let] = val; - lazy[right(node)][let] = val; - } - - lazy[node][let] = -1; + tree[node][let] = (b - a + 1) * val; + + if (a != b) { + lazy[left(node)][let] = val; + lazy[right(node)][let] = val; + } + + lazy[node][let] = -1; } - + void update(int let, int i, int j, int val, int node = 1, int a = 0, int b = N-1) { - if (lazy[node][let] != -1) - push(let, node, a, b, lazy[node][let]); - - if (a > b or a > j or b < i) - return; - - if (i <= a and b <= j) { - push(let, node, a, b, val); - return; - } - - update(let, i, j, val, left(node), a, (a + b) / 2); - update(let, i, j, val, right(node), (a + b) / 2 + 1, b); - tree[node][let] = tree[left(node)][let] + tree[right(node)][let]; + if (lazy[node][let] != -1) + push(let, node, a, b, lazy[node][let]); + + if (a > b or a > j or b < i) + return; + + if (i <= a and b <= j) { + push(let, node, a, b, val); + return; + } + + update(let, i, j, val, left(node), a, (a + b) / 2); + update(let, i, j, val, right(node), (a + b) / 2 + 1, b); + tree[node][let] = tree[left(node)][let] + tree[right(node)][let]; } - + int query(int let, int i, int j, int node = 1, int a = 0, int b = N-1) { - if (a > b || a > j || b < i) - return 0; - - if (lazy[node][let] != -1) - push(let, node, a, b, lazy[node][let]); - - if (a >= i and b <= j) - return tree[node][let]; - - int q1 = query(let, i, j, left(node), a, (a + b) / 2); - int q2 = query(let, i, j, right(node), (a + b) / 2 + 1, b); - return q1 + q2; + if (a > b || a > j || b < i) + return 0; + + if (lazy[node][let] != -1) + push(let, node, a, b, lazy[node][let]); + + if (a >= i and b <= j) + return tree[node][let]; + + int q1 = query(let, i, j, left(node), a, (a + b) / 2); + int q2 = query(let, i, j, right(node), (a + b) / 2 + 1, b); + return q1 + q2; } - + void get_ans(int let, string &ans, int node = 1, int l = 0, int r = N-1) { - if (lazy[node][let] != -1) - push(let, node, l, r, lazy[node][let]); - - if (!tree[node][let]) - return; - - if (l == r) { - ans[l] = let + 'a'; - return; - } - - get_ans(let, ans, left(node), l, (l+r)/2); - get_ans(let, ans, right(node), (l+r)/2 + 1, r); + if (lazy[node][let] != -1) + push(let, node, l, r, lazy[node][let]); + + if (!tree[node][let]) + return; + + if (l == r) { + ans[l] = let + 'a'; + return; + } + + get_ans(let, ans, left(node), l, (l+r)/2); + get_ans(let, ans, right(node), (l+r)/2 + 1, r); } - + int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - cin >> N >> q; - cin >> s; - - build(); - mset(lazy, -1); - - vector<int> cnt(26); - for (int i = 0; i < q; ++i) { - int a, b, k; cin >> a >> b >> k; - a--, b--; - for (int j = 0; j < 26; ++j) { - cnt[j] = query(j, a, b); - if (cnt[j]) update(j, a, b, 0); - } - - if (k) { - int bord = a; - for (int j = 0; j < 26; ++j) - if (cnt[j]) { - update(j, bord, bord + cnt[j] - 1, 1); - bord += cnt[j]; + ios::sync_with_stdio(0); + cin.tie(0); + + cin >> N >> q; + cin >> s; + + build(); + mset(lazy, -1); + + vector<int> cnt(26); + for (int i = 0; i < q; ++i) { + int a, b, k; cin >> a >> b >> k; + a--, b--; + for (int j = 0; j < 26; ++j) { + cnt[j] = query(j, a, b); + if (cnt[j]) update(j, a, b, 0); } - } else { - int bord = a; - for (int j = 25; j >= 0; --j) - if (cnt[j]) { - update(j, bord, bord + cnt[j] - 1, 1); - bord += cnt[j]; + + if (k) { + int bord = a; + for (int j = 0; j < 26; ++j) + if (cnt[j]) { + update(j, bord, bord + cnt[j] - 1, 1); + bord += cnt[j]; + } + } else { + int bord = a; + for (int j = 25; j >= 0; --j) + if (cnt[j]) { + update(j, bord, bord + cnt[j] - 1, 1); + bord += cnt[j]; + } } + + fill(all(cnt), 0); } - - fill(all(cnt), 0); - } - - string ans(N, '-'); - for (int j = 0; j < 26; ++j) - get_ans(j, ans); - cout << ans << ende; - return 0; + + string ans(N, '-'); + for (int j = 0; j < 26; ++j) + get_ans(j, ans); + cout << ans << ende; + return 0; } diff --git a/problems/crise_hidrica.cpp b/problems/crise_hidrica.cpp index 308fc2f..7519193 100644 --- a/problems/crise_hidrica.cpp +++ b/problems/crise_hidrica.cpp @@ -34,106 +34,106 @@ int par[MAX][MAXLOG]; ll upd[MAX]; void dfs(int va, int p = -1) { - par[va][0] = p; + par[va][0] = p; - if (p + 1) - h[va] = h[p] + 1; + if (p + 1) + h[va] = h[p] + 1; - for (int i = 1; i < MAXLOG; ++i) - if (par[va][i - 1] + 1) - par[va][i] = par[par[va][i - 1]][i - 1]; + for (int i = 1; i < MAXLOG; ++i) + if (par[va][i - 1] + 1) + par[va][i] = par[par[va][i - 1]][i - 1]; - for (auto u : graph[va]) - if (p != u) - dfs(u, va); + for (auto u : graph[va]) + if (p != u) + dfs(u, va); } void preprocess(int va) { - memset(par, -1, sizeof par); - dfs(va); + memset(par, -1, sizeof par); + dfs(va); } int query(int p, int q) { - if (h[p] < h[q]) - swap(p, q); + if (h[p] < h[q]) + swap(p, q); - for (int i = MAXLOG - 1; i >= 0; --i) - if (par[p][i] + 1 && h[par[p][i]] >= h[q]) { - p = par[p][i]; - } + for (int i = MAXLOG - 1; i >= 0; --i) + if (par[p][i] + 1 && h[par[p][i]] >= h[q]) { + p = par[p][i]; + } - if (p == q) - return p; + if (p == q) + return p; - for (int i = MAXLOG - 1; i >= 0; --i) - if (par[p][i] + 1 && par[p][i] != par[q][i]) { - p = par[p][i]; - q = par[q][i]; - } + for (int i = MAXLOG - 1; i >= 0; --i) + if (par[p][i] + 1 && par[p][i] != par[q][i]) { + p = par[p][i]; + q = par[q][i]; + } - return par[p][0]; + return par[p][0]; } ll fill(int x, int pare) { - ll ans = 0; + ll ans = 0; - for (auto i : graph[x]) - if (i != pare) - ans += fill(i, x); + for (auto i : graph[x]) + if (i != pare) + ans += fill(i, x); - return v[x] = ans + upd[x]; + return v[x] = ans + upd[x]; } int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n, d, a, b; - cin >> n >> d; - for (int i = 0; i < n - 1; ++i) { - cin >> a >> b; - graph[a].pb(b); - graph[b].pb(a); - } - - int m, vv, c; - cin >> m; - vector<int> w(m+1), avail; - for (int i = 0; i < m; ++i) { - cin >> c >> vv; - w[i+1] = vv; - avail.pb(c); - } - - preprocess(1); - - ll q, l; - int x, y; - cin >> q; - for (int i = 0; i < q; ++i) { - cin >> x >> y >> l; - int lca = query(x, y); - - upd[lca] -= l; - upd[x] += l; - upd[y] += l; - if (lca != 1) - upd[par[lca][0]] -= l; - } - - fill(1, -1); - - vector<ll> vvv(m+1); - for (int i = 0; i < m; ++i) - vvv[i+1] = v[avail[i]]; - - for (int i = 1; i <= m; ++i) - for (int j = 0; j <= d; ++j) - if (j >= w[i]) - dp[i][j] = max(dp[i-1][j], dp[i-1][j - w[i]] + vvv[i]); - else - dp[i][j] = dp[i-1][j]; - - cout << dp[m][d] << ende; - return 0; + ios::sync_with_stdio(0); + cin.tie(0); + + int n, d, a, b; + cin >> n >> d; + for (int i = 0; i < n - 1; ++i) { + cin >> a >> b; + graph[a].pb(b); + graph[b].pb(a); + } + + int m, vv, c; + cin >> m; + vector<int> w(m+1), avail; + for (int i = 0; i < m; ++i) { + cin >> c >> vv; + w[i+1] = vv; + avail.pb(c); + } + + preprocess(1); + + ll q, l; + int x, y; + cin >> q; + for (int i = 0; i < q; ++i) { + cin >> x >> y >> l; + int lca = query(x, y); + + upd[lca] -= l; + upd[x] += l; + upd[y] += l; + if (lca != 1) + upd[par[lca][0]] -= l; + } + + fill(1, -1); + + vector<ll> vvv(m+1); + for (int i = 0; i < m; ++i) + vvv[i+1] = v[avail[i]]; + + for (int i = 1; i <= m; ++i) + for (int j = 0; j <= d; ++j) + if (j >= w[i]) + dp[i][j] = max(dp[i-1][j], dp[i-1][j - w[i]] + vvv[i]); + else + dp[i][j] = dp[i-1][j]; + + cout << dp[m][d] << ende; + return 0; } diff --git a/problems/escalacao.cpp b/problems/escalacao.cpp index 67d71df..c8c5ccf 100644 --- a/problems/escalacao.cpp +++ b/problems/escalacao.cpp @@ -29,78 +29,78 @@ vector<ll> tree[MAX]; vector<ll> res; void merge(vector<ll> a, vector<ll> b, vector<ll> &ans) { - int i = 0, j = 0, cnt = 0; - for ( ; cnt < k && i < a.size() && j < b.size(); ++cnt) - if (a[i] > b[j]) - ans.push_back(a[i++]); - else - ans.push_back(b[j++]); - - if (cnt < k) { - if (i < a.size()) - for (; cnt < k && i < a.size(); ++i, ++cnt) - ans.push_back(a[i]); - else - for (; cnt < k && j < b.size(); ++j, ++cnt) - ans.push_back(b[j]); - } + int i = 0, j = 0, cnt = 0; + for ( ; cnt < k && i < a.size() && j < b.size(); ++cnt) + if (a[i] > b[j]) + ans.push_back(a[i++]); + else + ans.push_back(b[j++]); + + if (cnt < k) { + if (i < a.size()) + for (; cnt < k && i < a.size(); ++i, ++cnt) + ans.push_back(a[i]); + else + for (; cnt < k && j < b.size(); ++j, ++cnt) + ans.push_back(b[j]); + } } void build(int node = 1, int a = 0, int b = n - 1) { - if (a > b) - return; - if (a == b) { - tree[node].push_back(v[a]); - return; - } - - build(node * 2, a, (a + b) / 2); - build(node * 2 + 1, 1 + (a + b) / 2, b); - merge(tree[node * 2], tree[node * 2 + 1], tree[node]); + if (a > b) + return; + if (a == b) { + tree[node].push_back(v[a]); + return; + } + + build(node * 2, a, (a + b) / 2); + build(node * 2 + 1, 1 + (a + b) / 2, b); + merge(tree[node * 2], tree[node * 2 + 1], tree[node]); } void query(int i, int j, int node = 1, int a = 0, int b = n - 1) { - if (a > b || a > j || b < i) - return; - if (a >= i && b <= j) { - res.insert(res.end(), tree[node].begin(), tree[node].end()); - return; - } - - query(i, j, node * 2, a, (a + b) / 2); - query(i, j, 1 + node * 2, 1 + (a + b) / 2, b); + if (a > b || a > j || b < i) + return; + if (a >= i && b <= j) { + res.insert(res.end(), tree[node].begin(), tree[node].end()); + return; + } + + query(i, j, node * 2, a, (a + b) / 2); + query(i, j, 1 + node * 2, 1 + (a + b) / 2, b); } int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - cin >> n >> k >> r; - for (int i = 0; i < n; ++i) - cin >> v[i]; - build(); - - for (int i = 0; i < r; ++i) { - int ans = 1; - res.clear(); - ll a, b; cin >> a >> b; - query(a - 1, b - 1); - - sort(res.begin(), res.end()); - - int cnt = 0; - for (int j = res.size() - 1; j >= 0; --j) { - if (cnt >= k || res[j] == 0) { - if (res[j] == 0 && j == res.size() - 1) - ans = 0; - break; - } - ans = (ans * res[j]) % MOD; - cnt++; + ios::sync_with_stdio(0); + cin.tie(0); + + cin >> n >> k >> r; + for (int i = 0; i < n; ++i) + cin >> v[i]; + build(); + + for (int i = 0; i < r; ++i) { + int ans = 1; + res.clear(); + ll a, b; cin >> a >> b; + query(a - 1, b - 1); + + sort(res.begin(), res.end()); + + int cnt = 0; + for (int j = res.size() - 1; j >= 0; --j) { + if (cnt >= k || res[j] == 0) { + if (res[j] == 0 && j == res.size() - 1) + ans = 0; + break; + } + ans = (ans * res[j]) % MOD; + cnt++; + } + + cout << ans << ende; } - cout << ans << ende; - } - - return 0; + return 0; } diff --git a/problems/exponial.cpp b/problems/exponial.cpp index 8eb98af..bc3e4ba 100644 --- a/problems/exponial.cpp +++ b/problems/exponial.cpp @@ -22,59 +22,59 @@ using ll = long long; using ii = pair<int,int>; ll phi(ll n) { - ll result = n; + ll result = n; - for (ll i = 2; i*i <= n; i++) { - if (n % i == 0) { - while (n % i == 0) n /= i; - result -= result / i; + for (ll i = 2; i*i <= n; i++) { + if (n % i == 0) { + while (n % i == 0) n /= i; + result -= result / i; + } } - } - if (n > 1) - result -= result / n; + if (n > 1) + result -= result / n; - return result; + return result; } ll fast_pow(ll x, ll n, ll m) { - ll ans = 1; + ll ans = 1; - while (n) { - if (n & 1) - ans = (ans * x) % m; + while (n) { + if (n & 1) + ans = (ans * x) % m; - n >>= 1; - x = (x * x) % m; - } + n >>= 1; + x = (x * x) % m; + } - return ans % m; + return ans % m; } ll solve(ll n, ll m) { - if (m == 1) - return 0; + if (m == 1) + return 0; + + if (n <= 5) { + if (n == 4) return 262144 % m; + else if (n == 3) return 9 % m; + else if (n == 2) return 2 % m; + else if (n == 1) return 1 % m; + else return fast_pow(5, 262144, m); + } - if (n <= 5) { - if (n == 4) return 262144 % m; - else if (n == 3) return 9 % m; - else if (n == 2) return 2 % m; - else if (n == 1) return 1 % m; - else return fast_pow(5, 262144, m); - } - - // n^e % m == n^(phi(m) + e % phi(m)) mod m - ll p = phi(m); - ll e = p + solve(n - 1, p) % p; - return fast_pow(n, e, m); + // n^e % m == n^(phi(m) + e % phi(m)) mod m + ll p = phi(m); + ll e = p + solve(n - 1, p) % p; + return fast_pow(n, e, m); } int main() { - ios::sync_with_stdio(0); - cin.tie(0); + ios::sync_with_stdio(0); + cin.tie(0); - ll n, m; cin >> n >> m; - cout << solve(n, m) << ende; + ll n, m; cin >> n >> m; + cout << solve(n, m) << ende; - return 0; + return 0; } diff --git a/problems/trees_partition.cpp b/problems/trees_partition.cpp index e7aaf79..48374d8 100644 --- a/problems/trees_partition.cpp +++ b/problems/trees_partition.cpp @@ -26,65 +26,65 @@ unordered_map<ll, int> M; ll ans = 0, tot = 0; ll dfs(int x, int par) { - ll down = hsh[x]; - - for (auto i : t1[x]) { - if (i != par) { - ll bel = dfs(i, x); - down ^= bel; - M[bel] = 1; + ll down = hsh[x]; + + for (auto i : t1[x]) { + if (i != par) { + ll bel = dfs(i, x); + down ^= bel; + M[bel] = 1; + } } - } - return down; + return down; } ll solve(int x, int par) { - ll down = hsh[x]; - - for (auto i : t2[x]) { - if (i != par) { - ll bel = solve(i, x); - down ^= bel; - - if (M[bel] || M[bel ^ tot]) { - ans++; - M[bel] = M[bel ^ tot] = 0; - } + ll down = hsh[x]; + + for (auto i : t2[x]) { + if (i != par) { + ll bel = solve(i, x); + down ^= bel; + + if (M[bel] || M[bel ^ tot]) { + ans++; + M[bel] = M[bel ^ tot] = 0; + } + } } - } - return down; + return down; } int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - int n, x; - cin >> n; - mt19937_64 mt(time(NULL)); - - for (int i = 0; i < n - 1; ++i) { - cin >> x; - t1[i+1].pb(x-1); - t1[x-1].pb(i+1); - } - - for (int i = 0; i < n - 1; ++i) { - cin >> x; - t2[i+1].pb(x-1); - t2[x-1].pb(i+1); - } - - for (int i = 0; i < n; ++i) { - hsh[i] = mt(); - tot ^= hsh[i]; - } - - dfs(0, -1); - solve(0, -1); - - cout << ans << '\n'; - return 0; + ios::sync_with_stdio(0); + cin.tie(0); + + int n, x; + cin >> n; + mt19937_64 mt(time(NULL)); + + for (int i = 0; i < n - 1; ++i) { + cin >> x; + t1[i+1].pb(x-1); + t1[x-1].pb(i+1); + } + + for (int i = 0; i < n - 1; ++i) { + cin >> x; + t2[i+1].pb(x-1); + t2[x-1].pb(i+1); + } + + for (int i = 0; i < n; ++i) { + hsh[i] = mt(); + tot ^= hsh[i]; + } + + dfs(0, -1); + solve(0, -1); + + cout << ans << '\n'; + return 0; } diff --git a/problems/xor_submatrix.cpp b/problems/xor_submatrix.cpp index 70afff0..54323e1 100644 --- a/problems/xor_submatrix.cpp +++ b/problems/xor_submatrix.cpp @@ -27,69 +27,69 @@ int states = 0; int trie[MAX][2]; void insert(int x) { - int node = 0; + int node = 0; - for (int i = 30; i >= 0; --i) { - int b = !!(x & (1 << i)); + for (int i = 30; i >= 0; --i) { + int b = !!(x & (1 << i)); - if (trie[node][b] == -1) - trie[node][b] = ++states; - node = trie[node][b]; - } + if (trie[node][b] == -1) + trie[node][b] = ++states; + node = trie[node][b]; + } } int search(int x) { - int node = 0; - int ans = 0; - - for (int i = 30; i >= 0; --i) { - int b = !(x & (1 << i)); + int node = 0; + int ans = 0; - if (trie[node][b] == -1) - b ^= 1; + for (int i = 30; i >= 0; --i) { + int b = !(x & (1 << i)); - node = trie[node][b]; - ans |= (b << i); - } + if (trie[node][b] == -1) + b ^= 1; - return ans; + node = trie[node][b]; + ans |= (b << i); + } + + return ans; } int main() { - ios::sync_with_stdio(0); - cin.tie(0); - - mset(trie, -1); - - int n, m; cin >> n >> m; - vector<int> v(n+1), u(m+1); - - v[0] = u[0] = 0; - for (int i = 1; i <= n; ++i) { - int x; cin >> x; - v[i] = v[i-1] ^ x; - } - - for (int i = 1; i <= m; ++i) { - int x; cin >> x; - u[i] = u[i-1] ^ x; - } - - int ans = 0; - for (int i = 0; i <= n; ++i) - for (int j = i; j <= n; ++j) - if ((j - i) % 2) - insert(v[i] ^ v[j]); - else - ans = max(ans, v[i] ^ v[j]); - - for (int i = 0; i <= m; ++i) - for (int j = i; j <= m; ++j) - if ((j - i) % 2) - ans = max(ans, u[i] ^ u[j] ^ search(u[i] ^ u[j])); - else - ans = max(ans, u[i] ^ u[j]); - - cout << ans << ende; - return 0; + ios::sync_with_stdio(0); + cin.tie(0); + + mset(trie, -1); + + int n, m; cin >> n >> m; + vector<int> v(n+1), u(m+1); + + v[0] = u[0] = 0; + for (int i = 1; i <= n; ++i) { + int x; cin >> x; + v[i] = v[i-1] ^ x; + } + + for (int i = 1; i <= m; ++i) { + int x; cin >> x; + u[i] = u[i-1] ^ x; + } + + int ans = 0; + for (int i = 0; i <= n; ++i) + for (int j = i; j <= n; ++j) + if ((j - i) % 2) + insert(v[i] ^ v[j]); + else + ans = max(ans, v[i] ^ v[j]); + + for (int i = 0; i <= m; ++i) + for (int j = i; j <= m; ++j) + if ((j - i) % 2) + ans = max(ans, u[i] ^ u[j] ^ search(u[i] ^ u[j])); + else + ans = max(ans, u[i] ^ u[j]); + + cout << ans << ende; + return 0; } -- GitLab