Skip to content

Commit f4b0044

Browse files
committed
Meta Hacker Cup 2022 Qualification Round (Rank: 112, Score: 100/100)
1 parent 15b5e07 commit f4b0044

File tree

4 files changed

+282
-0
lines changed

4 files changed

+282
-0
lines changed

fbhc/2022_qual/a.cpp

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
void solve() {
6+
int n, k;
7+
cin >> n >> k;
8+
vector<int> s(n);
9+
for (int i = 0; i < n; ++i) {
10+
cin >> s[i];
11+
}
12+
if (n > 2 * k) {
13+
puts("NO");
14+
return;
15+
}
16+
sort(s.begin(), s.end());
17+
for (int i = 1; i + 1 < n; ++i) {
18+
if (s[i-1] == s[i] && s[i] == s[i+1]) {
19+
puts("NO");
20+
return;
21+
}
22+
}
23+
puts("YES");
24+
}
25+
26+
int main(int argc, char * argv[]) {
27+
clock_t starttime = clock();
28+
int seed = time(0);
29+
if (argc >= 2) {
30+
seed = atoi(argv[1]);
31+
}
32+
cerr << "random seed\t= " << seed << endl;
33+
srand(seed);
34+
35+
int tt;
36+
scanf("%d", &tt);
37+
for (int tc = 1; tc <= tt; ++tc) {
38+
printf("Case #%d: ", tc);
39+
solve();
40+
fflush(stdout);
41+
cerr << "~ TC#" << tc << " done! execution time : " <<
42+
(double)(clock() - starttime) / CLOCKS_PER_SEC << " s " << endl;
43+
}
44+
return 0;
45+
}

fbhc/2022_qual/b.cpp

+90
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
void solve() {
6+
int n, m;
7+
cin >> n >> m;
8+
vector<string> grid(n);
9+
vector<vector<int>> deg(n, vector<int>(m, 0));
10+
for (int i = 0; i < n; ++i) {
11+
cin >> grid[i];
12+
}
13+
for (int i = 0; i < n; ++i) {
14+
for (int j = 0; j < m; ++j) {
15+
if (grid[i][j] == '#') continue;
16+
if (i > 0 && grid[i-1][j] != '#') {
17+
++deg[i][j];
18+
++deg[i-1][j];
19+
}
20+
if (j > 0 && grid[i][j-1] != '#') {
21+
++deg[i][j];
22+
++deg[i][j-1];
23+
}
24+
}
25+
}
26+
queue<pair<int, int>> que;
27+
for (int i = 0; i < n; ++i) {
28+
for (int j = 0; j < m; ++j) {
29+
if (deg[i][j] == 1) {
30+
que.emplace(i, j);
31+
}
32+
}
33+
}
34+
vector<int> dr = {-1, 0, 1, 0};
35+
vector<int> dc = {0, -1, 0, 1};
36+
while (!que.empty()) {
37+
int r, c;
38+
tie(r, c) = que.front();
39+
que.pop();
40+
int cnt = deg[r][c];
41+
deg[r][c] = 0;
42+
for (int i = 0; i < 4; ++i) {
43+
int x = r + dr[i];
44+
int y = c + dc[i];
45+
if (x < 0 || x >= n || y < 0 || y >= m) continue;
46+
if (grid[x][y] == '#' || deg[x][y] <= 0) continue;
47+
--deg[x][y];
48+
--cnt;
49+
if (deg[x][y] == 1)
50+
que.emplace(x, y);
51+
}
52+
assert(cnt == 0);
53+
}
54+
for (int i = 0; i < n; ++i) {
55+
for (int j = 0; j < m; ++j) {
56+
if (grid[i][j] == '^' && deg[i][j] < 2) {
57+
puts("Impossible");
58+
return;
59+
}
60+
if (deg[i][j] >= 2) {
61+
assert(grid[i][j] != '#');
62+
grid[i][j] = '^';
63+
}
64+
}
65+
}
66+
puts("Possible");
67+
for (int i = 0; i < n; ++i)
68+
cout << grid[i] << '\n';
69+
}
70+
71+
int main(int argc, char * argv[]) {
72+
clock_t starttime = clock();
73+
int seed = time(0);
74+
if (argc >= 2) {
75+
seed = atoi(argv[1]);
76+
}
77+
cerr << "random seed\t= " << seed << endl;
78+
srand(seed);
79+
80+
int tt;
81+
scanf("%d", &tt);
82+
for (int tc = 1; tc <= tt; ++tc) {
83+
printf("Case #%d: ", tc);
84+
solve();
85+
fflush(stdout);
86+
cerr << "~ TC#" << tc << " done! execution time : " <<
87+
(double)(clock() - starttime) / CLOCKS_PER_SEC << " s " << endl;
88+
}
89+
return 0;
90+
}

fbhc/2022_qual/c.cpp

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
void solve() {
6+
int n;
7+
vector<string> s(1);
8+
cin >> n >> s[0];
9+
auto backtrack = [&](auto& self, string cur, int len) {
10+
if ((int)s.size() >= n) return;
11+
if ((int)cur.size() == len) {
12+
s.push_back(cur);
13+
return;
14+
}
15+
cur.push_back('.');
16+
self(self, cur, len);
17+
cur.back() = '-';
18+
self(self, cur, len);
19+
};
20+
backtrack(backtrack, s[0][0] == '.' ? "-" : ".", 10);
21+
assert((int)s.size() == n);
22+
cout << "\n";
23+
for (int i = 1; i < n; ++i) {
24+
cout << s[i] << '\n';
25+
}
26+
}
27+
28+
int main(int argc, char * argv[]) {
29+
clock_t starttime = clock();
30+
int seed = time(0);
31+
if (argc >= 2) {
32+
seed = atoi(argv[1]);
33+
}
34+
cerr << "random seed\t= " << seed << endl;
35+
srand(seed);
36+
37+
int tt;
38+
scanf("%d", &tt);
39+
for (int tc = 1; tc <= tt; ++tc) {
40+
printf("Case #%d: ", tc);
41+
solve();
42+
fflush(stdout);
43+
cerr << "~ TC#" << tc << " done! execution time : " <<
44+
(double)(clock() - starttime) / CLOCKS_PER_SEC << " s " << endl;
45+
}
46+
return 0;
47+
}

fbhc/2022_qual/d.cpp

+100
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
void solve() {
6+
int n, m, q;
7+
cin >> n >> m >> q;
8+
int sq = (int)sqrt(n) + 1;
9+
vector<vector<pair<int, int>>> g(n);
10+
map<pair<int, int>, int> mapw;
11+
for (int i = 0; i < m; ++i) {
12+
int u, v, w;
13+
cin >> u >> v >> w;
14+
--u, --v;
15+
g[u].emplace_back(v, w);
16+
g[v].emplace_back(u, w);
17+
mapw[make_pair(u, v)] = w;
18+
mapw[make_pair(v, u)] = w;
19+
}
20+
vector<int> id(n, -1);
21+
vector<int> big;
22+
for (int i = 0; i < n; ++i) {
23+
if ((int)g[i].size() <= sq) continue;
24+
id[i] = big.size();
25+
big.push_back(i);
26+
}
27+
int nbig = big.size();
28+
vector<vector<long long>> cost(nbig, vector<long long>(nbig, 0));
29+
for (int i = 0; i < n; ++i) {
30+
vector<pair<int, int>> cur;
31+
for (auto [u, w] : g[i]) {
32+
if (id[u] < 0) continue;
33+
int b1 = id[u];
34+
for (auto [b2, w2] : cur) {
35+
assert(b1 != b2);
36+
int res = min(w, w2);
37+
cost[b1][b2] += res;
38+
cost[b2][b1] += res;
39+
}
40+
cur.emplace_back(b1, w);
41+
}
42+
}
43+
vector<long long> ans(q, 0);
44+
vector<int> x(q), y(q);
45+
vector<vector<pair<int, int>>> process(n);
46+
for (int i = 0; i < q; ++i) {
47+
cin >> x[i] >> y[i];
48+
--x[i];
49+
--y[i];
50+
ans[i] = 2LL * mapw[make_pair(x[i], y[i])];
51+
int bx = id[x[i]];
52+
int by = id[y[i]];
53+
if (bx >= 0 && by >= 0) {
54+
ans[i] += cost[bx][by];
55+
} else if (g[x[i]].size() < g[y[i]].size()) {
56+
process[y[i]].emplace_back(x[i], i);
57+
} else {
58+
process[x[i]].emplace_back(y[i], i);
59+
}
60+
}
61+
vector<int> curw(n, 0);
62+
for (int v = 0; v < n; ++v) {
63+
for (auto [u, w] : g[v]) {
64+
curw[u] = w;
65+
}
66+
for (auto [u, i] : process[v]) {
67+
for (auto [other, w2] : g[u]) {
68+
ans[i] += min(w2, curw[other]);
69+
}
70+
}
71+
for (auto [u, w] : g[v]) {
72+
curw[u] = 0;
73+
}
74+
}
75+
76+
for (int i = 0; i < q; ++i) {
77+
printf("%lld%c", ans[i], i+1 == q ? '\n' : ' ' );
78+
}
79+
}
80+
81+
int main(int argc, char * argv[]) {
82+
clock_t starttime = clock();
83+
int seed = time(0);
84+
if (argc >= 2) {
85+
seed = atoi(argv[1]);
86+
}
87+
cerr << "random seed\t= " << seed << endl;
88+
srand(seed);
89+
90+
int tt;
91+
scanf("%d", &tt);
92+
for (int tc = 1; tc <= tt; ++tc) {
93+
printf("Case #%d: ", tc);
94+
solve();
95+
fflush(stdout);
96+
cerr << "~ TC#" << tc << " done! execution time : " <<
97+
(double)(clock() - starttime) / CLOCKS_PER_SEC << " s " << endl;
98+
}
99+
return 0;
100+
}

0 commit comments

Comments
 (0)