Skip to content

Commit 068e38d

Browse files
committed
Tsinghua Bootcamp 2026. Qualification round
1 parent 80a3cd5 commit 068e38d

5 files changed

Lines changed: 338 additions & 0 deletions

File tree

‎Codeforces Gym/696681C.py‎

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
"""
2+
@file 696681C.py
3+
@author Macesuted (i@macesuted.moe)
4+
@date 2026-06-06
5+
6+
@copyright Copyright (c) 2026
7+
"""
8+
9+
sa = input()
10+
sb = input()
11+
12+
if sb[-len(sa):] == sa:
13+
print(0)
14+
exit(0)
15+
16+
if len(sa) >= len(sb):
17+
print(-1)
18+
exit(0)
19+
20+
a = int(sa)
21+
b = int(sb)
22+
23+
if a > b // 10:
24+
print(-1)
25+
exit(0)
26+
27+
c = 0
28+
while a < b // 10 and b % 10 != 0:
29+
a += 1
30+
b += 1
31+
c += 1
32+
33+
if a == b // 10:
34+
print(c)
35+
exit(0)
36+
37+
delt = (b // 10 - a) // 9 * 10
38+
a += delt
39+
b += delt
40+
c += delt
41+
42+
while a < b // 10:
43+
a += 1
44+
b += 1
45+
c += 1
46+
47+
print(c)

‎Codeforces Gym/696681E.cpp‎

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
/**
2+
* @file 696681E.cpp
3+
* @author Macesuted (i@macesuted.moe)
4+
* @date 2026-06-06
5+
*
6+
* @copyright Copyright (c) 2026
7+
*
8+
*/
9+
10+
#include <bits/stdc++.h>
11+
using namespace std;
12+
13+
#ifndef LOCAL
14+
#define endl '\n'
15+
#endif
16+
17+
bool mem1;
18+
19+
int64_t fib[60], ori[40], base[40], idx[40];
20+
21+
void solve(void) {
22+
int64_t n, m;
23+
cin >> n >> m;
24+
25+
fib[0] = fib[1] = 1;
26+
for (int i = 2; i < 59; i++) fib[i] = fib[i - 2] + fib[i - 1];
27+
28+
vector<int64_t> rest;
29+
for (int i = 0; i < 59; i++) {
30+
int64_t v = fib[i], id = 0;
31+
for (int j = 0; j < 40; j++) {
32+
if (!(v >> j & 1)) continue;
33+
if (!idx[j]) {
34+
ori[j] = fib[i], base[j] = v, idx[j] = id ^ ((int64_t)1 << j);
35+
break;
36+
}
37+
v ^= base[j], id ^= idx[j];
38+
}
39+
if (!v) rest.push_back(fib[i]);
40+
}
41+
42+
int ans = INT_MAX;
43+
for (size_t S = 0; S < (1 << rest.size()); S++) {
44+
int64_t xsum = 0, sum = 0;
45+
for (size_t i = 0; i < rest.size(); i++)
46+
if (S >> i & 1) xsum ^= rest[i], sum += rest[i];
47+
48+
int64_t v = n ^ xsum, id = 0;
49+
for (int i = 0; i < 40; i++)
50+
if (v >> i & 1) v ^= base[i], id ^= idx[i];
51+
for (int i = 0; i < 40; i++)
52+
if (id >> i & 1) sum += ori[i];
53+
54+
if (sum > m || (m - sum) & 1) continue;
55+
56+
int cur = __builtin_popcountll(id) + __builtin_popcountll(S);
57+
for (int i = 58; ~i; i--)
58+
if (sum + 2 * fib[i] <= m) sum += 2 * fib[i], cur += 2;
59+
ans = min(ans, cur);
60+
}
61+
62+
cout << (ans == INT_MAX ? -1 : ans) << endl;
63+
64+
return;
65+
}
66+
67+
bool mem2;
68+
69+
int main() {
70+
ios::sync_with_stdio(false), cin.tie(nullptr);
71+
#ifdef LOCAL
72+
cerr << "Memory Cost: " << abs(&mem1 - &mem2) / 1024. / 1024. << "MB" << endl;
73+
#endif
74+
75+
int _ = 1;
76+
while (_--) solve();
77+
78+
#ifdef LOCAL
79+
cerr << "Time Cost: " << clock() * 1000. / CLOCKS_PER_SEC << "MS" << endl;
80+
#endif
81+
return 0;
82+
}

‎Codeforces Gym/696681F.cpp‎

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/**
2+
* @file 696681F.cpp
3+
* @author Macesuted (i@macesuted.moe)
4+
* @date 2026-06-06
5+
*
6+
* @copyright Copyright (c) 2026
7+
*
8+
*/
9+
10+
#include <bits/stdc++.h>
11+
using namespace std;
12+
13+
#ifndef LOCAL
14+
#define endl '\n'
15+
#endif
16+
17+
bool mem1;
18+
19+
#define maxn 200005
20+
21+
int fa[maxn];
22+
23+
int getfa(int p) { return fa[p] == p ? p : fa[p] = getfa(fa[p]); }
24+
25+
void solve(void) {
26+
int n, m;
27+
cin >> n >> m;
28+
for (int i = 1; i <= n; i++) fa[i] = i;
29+
30+
int ans = 0;
31+
for (int i = 1, x, y; i <= m; i++) {
32+
cin >> x >> y;
33+
if (getfa(x) != getfa(y)) ans++, fa[getfa(x)] = getfa(y);
34+
}
35+
cout << ans << endl;
36+
37+
return;
38+
}
39+
40+
bool mem2;
41+
42+
int main() {
43+
ios::sync_with_stdio(false), cin.tie(nullptr);
44+
#ifdef LOCAL
45+
cerr << "Memory Cost: " << abs(&mem1 - &mem2) / 1024. / 1024. << "MB" << endl;
46+
#endif
47+
48+
int _ = 1;
49+
while (_--) solve();
50+
51+
#ifdef LOCAL
52+
cerr << "Time Cost: " << clock() * 1000. / CLOCKS_PER_SEC << "MS" << endl;
53+
#endif
54+
return 0;
55+
}

‎Codeforces Gym/696681I.cpp‎

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
/**
2+
* @file 696681I.cpp
3+
* @author Macesuted (i@macesuted.moe)
4+
* @date 2026-06-06
5+
*
6+
* @copyright Copyright (c) 2026
7+
*
8+
*/
9+
10+
#include <bits/stdc++.h>
11+
using namespace std;
12+
13+
#ifndef LOCAL
14+
#define endl '\n'
15+
#endif
16+
17+
bool mem1;
18+
19+
#define maxn 200005
20+
#define B 500
21+
22+
int64_t buc[B], a[maxn], sum[B];
23+
24+
void solve(void) {
25+
int q;
26+
cin >> q;
27+
28+
while (q--) {
29+
char op;
30+
cin >> op;
31+
if (op == '?') {
32+
int t;
33+
cin >> t, t--;
34+
int ans = 0;
35+
for (int i = 1; i < B; i++)
36+
if (t / i % 2 == 0) ans += buc[i];
37+
int x = -1;
38+
while (x + B <= t) x += B, ans += sum[x / B];
39+
while (x < t) ans += a[++x];
40+
cout << ans << endl;
41+
} else {
42+
int x, k;
43+
cin >> x >> k;
44+
if (op == '-') x = -x;
45+
if (k < B)
46+
buc[k] += x;
47+
else
48+
for (int i = 0; i < maxn; i += k, x = -x) a[i] += x, sum[i / B] += x;
49+
}
50+
}
51+
52+
return;
53+
}
54+
55+
bool mem2;
56+
57+
int main() {
58+
ios::sync_with_stdio(false), cin.tie(nullptr);
59+
#ifdef LOCAL
60+
cerr << "Memory Cost: " << abs(&mem1 - &mem2) / 1024. / 1024. << "MB" << endl;
61+
#endif
62+
63+
int _ = 1;
64+
while (_--) solve();
65+
66+
#ifdef LOCAL
67+
cerr << "Time Cost: " << clock() * 1000. / CLOCKS_PER_SEC << "MS" << endl;
68+
#endif
69+
return 0;
70+
}

‎Codeforces Gym/696681L.cpp‎

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
/**
2+
* @file 696681L.cpp
3+
* @author Macesuted (i@macesuted.moe)
4+
* @date 2026-06-06
5+
*
6+
* @copyright Copyright (c) 2026
7+
*
8+
*/
9+
10+
#include <bits/stdc++.h>
11+
using namespace std;
12+
13+
#ifndef LOCAL
14+
#define endl '\n'
15+
#endif
16+
17+
bool mem1;
18+
19+
#define maxn 200005
20+
21+
using pll = pair<int64_t, int64_t>;
22+
23+
class SegmentTree {
24+
private:
25+
pll a[maxn << 2];
26+
int n;
27+
28+
pll merge(const pll& a, const pll& b) { return {a.first + b.first + a.second * b.second, a.second + b.second}; }
29+
void build(int p, int l, int r, int v[]) {
30+
if (l == r) return a[p] = {0, v[l]}, void();
31+
int mid = (l + r) >> 1;
32+
build(p << 1, l, mid, v), build(p << 1 | 1, mid + 1, r, v);
33+
return a[p] = merge(a[p << 1], a[p << 1 | 1]), void();
34+
}
35+
pll query(int p, int l, int r, int ql, int qr) {
36+
if (ql <= l && r <= qr) return a[p];
37+
int mid = (l + r) >> 1;
38+
if (qr <= mid) return query(p << 1, l, mid, ql, qr);
39+
if (ql > mid) return query(p << 1 | 1, mid + 1, r, ql, qr);
40+
return merge(query(p << 1, l, mid, ql, qr), query(p << 1 | 1, mid + 1, r, ql, qr));
41+
}
42+
43+
public:
44+
void resize(int _n) { return n = _n, void(); }
45+
void build(int v[]) { return build(1, 1, n, v); }
46+
pll query(int l, int r) { return query(1, 1, n, l, r); }
47+
};
48+
49+
int v[maxn];
50+
51+
void solve(void) {
52+
int n, q;
53+
cin >> n >> q;
54+
for (int i = 1; i <= n; i++) cin >> v[i];
55+
56+
SegmentTree SGT;
57+
SGT.resize(n), SGT.build(v);
58+
59+
while (q--) {
60+
int l, r, S;
61+
cin >> l >> r >> S;
62+
pll res = SGT.query(l, r);
63+
cout << (res.second > S ? -1 : res.first + res.second * (S - res.second)) << endl;
64+
}
65+
66+
return;
67+
}
68+
69+
bool mem2;
70+
71+
int main() {
72+
ios::sync_with_stdio(false), cin.tie(nullptr);
73+
#ifdef LOCAL
74+
cerr << "Memory Cost: " << abs(&mem1 - &mem2) / 1024. / 1024. << "MB" << endl;
75+
#endif
76+
77+
int _ = 1;
78+
while (_--) solve();
79+
80+
#ifdef LOCAL
81+
cerr << "Time Cost: " << clock() * 1000. / CLOCKS_PER_SEC << "MS" << endl;
82+
#endif
83+
return 0;
84+
}

0 commit comments

Comments
 (0)