From a5408dafdebe91fb5a54b0ac4cc51e6e8a6a6ad6 Mon Sep 17 00:00:00 2001 From: Bruno Freitas Tissei <bft15@inf.ufpr.br> Date: Mon, 4 Mar 2019 18:52:23 -0300 Subject: [PATCH] Add ICPC SA17 Signed-off-by: Bruno Freitas Tissei <bft15@inf.ufpr.br> --- algorithms/graph/kruskal.cpp | 11 +-- algorithms/graph/lca.cpp | 4 +- contests/ICPC_SA17/C.cpp | 60 ++++++++++++ contests/ICPC_SA17/E.cpp | 58 ++++++++++++ contests/ICPC_SA17/H.cpp | 31 +++++++ contests/ICPC_SA17/I.cpp | 174 +++++++++++++++++++++++++++++++++++ contests/ICPC_SA17/a.out | Bin 0 -> 17200 bytes 7 files changed, 329 insertions(+), 9 deletions(-) create mode 100644 contests/ICPC_SA17/C.cpp create mode 100644 contests/ICPC_SA17/E.cpp create mode 100644 contests/ICPC_SA17/H.cpp create mode 100644 contests/ICPC_SA17/I.cpp create mode 100755 contests/ICPC_SA17/a.out diff --git a/algorithms/graph/kruskal.cpp b/algorithms/graph/kruskal.cpp index 383808e..d6b05e0 100644 --- a/algorithms/graph/kruskal.cpp +++ b/algorithms/graph/kruskal.cpp @@ -12,15 +12,12 @@ vector<iii> mst; // Result vector<iii> edges; -bool cmp(iii a, iii b) { - return a.se < b.se; - //* return a.se > b.se -} - - // Return value of MST and build mst vector with edges that belong to the tree int kruskal() { - sort(all(edges), cmp); + sort(all(edges), [&](const iii &a, const iii &b) { + return a.se < b.se; + //* return a.se > b.se + }); int size = 0; for (int i = 0; i < MAX; i++) diff --git a/algorithms/graph/lca.cpp b/algorithms/graph/lca.cpp index 32a2fce..6bfb144 100644 --- a/algorithms/graph/lca.cpp +++ b/algorithms/graph/lca.cpp @@ -42,8 +42,8 @@ void dfs(int v, int p = -1, int c = 0) { // Preprocess tree rooted at v void preprocess(int v) { - memset(par, -1, sizeof par); - //*** memset(cost, 0, sizeof cost); + mset(par, -1); + //*** mset(cost, 0; dfs(v); } diff --git a/contests/ICPC_SA17/C.cpp b/contests/ICPC_SA17/C.cpp new file mode 100644 index 0000000..8503489 --- /dev/null +++ b/contests/ICPC_SA17/C.cpp @@ -0,0 +1,60 @@ +#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; + +typedef long long ll; +typedef pair<int,int> ii; + +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; +} diff --git a/contests/ICPC_SA17/E.cpp b/contests/ICPC_SA17/E.cpp new file mode 100644 index 0000000..7f15659 --- /dev/null +++ b/contests/ICPC_SA17/E.cpp @@ -0,0 +1,58 @@ +#include <bits/stdc++.h> + +#define MAX 1010 +#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; + +typedef long long ll; +typedef pair<int,int> ii; + +int n; +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; +} + +int main() { + ios::sync_with_stdio(0); + cin.tie(0); + + cin >> s >> n; + mset(dp, -1); + + cout << (!solve(0, 0) ? "*" : s) << ende; + return 0; +} + diff --git a/contests/ICPC_SA17/H.cpp b/contests/ICPC_SA17/H.cpp new file mode 100644 index 0000000..f4449e7 --- /dev/null +++ b/contests/ICPC_SA17/H.cpp @@ -0,0 +1,31 @@ +#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; + +typedef long long ll; +typedef pair<int,int> ii; + +int main() { + ios::sync_with_stdio(0); + cin.tie(0); + + 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; +} diff --git a/contests/ICPC_SA17/I.cpp b/contests/ICPC_SA17/I.cpp new file mode 100644 index 0000000..4335b4a --- /dev/null +++ b/contests/ICPC_SA17/I.cpp @@ -0,0 +1,174 @@ +#include <bits/stdc++.h> + +#define MAX 201010 +#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; + +typedef long long ll; +typedef pair<int,int> ii; +typedef pair<ii,int> iii; + +map<ii, bool> mst; +vector<ii> graph[MAX]; +vector<iii> edges; + +int pare[MAX]; +int size[MAX]; + +void make_set(int x) { + pare[x] = x; + size[x] = 1; +} + + +int find_set(int 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); + + if (x == y) + return; + + if (size[x] > size[y]) + swap(x, y); + + pare[x] = y; + size[y] += size[x]; +} + + +int kruskal() { + 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); + + 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; + + 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); + } + } + + return ans; +} + +#define MAXLOG 20 + +int h[MAX]; +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; + + 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 (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); +} + + +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 = max(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 = 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])); +} + +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; +} diff --git a/contests/ICPC_SA17/a.out b/contests/ICPC_SA17/a.out new file mode 100755 index 0000000000000000000000000000000000000000..bfe686fe7a6b3981e10c013b2d82a356a7be7cf7 GIT binary patch literal 17200 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 Jwr?AkegIjDV66ZE literal 0 HcmV?d00001 -- GitLab