Skip to content

Commit 6fa705a

Browse files
committed
2025“钉耙编程”中国大学生算法设计暑期联赛(3)
1 parent 5b68d72 commit 6fa705a

3 files changed

Lines changed: 166 additions & 0 deletions

File tree

HDOJ/1174-1004.cpp

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/**
2+
* @file 1174-1004.cpp
3+
* @author Macesuted (i@macesuted.moe)
4+
* @date 2025-07-25
5+
*
6+
* @copyright Copyright (c) 2025
7+
*
8+
*/
9+
10+
#include <bits/stdc++.h>
11+
using namespace std;
12+
13+
int a[15], A[15], B[15], id[15];
14+
15+
void solve(void) {
16+
int n = 13;
17+
for (int i = 1; i <= n; i++) cin >> a[i];
18+
19+
auto check = [&](int lim) -> bool {
20+
int sumA = 0, sumB = 0;
21+
for (int i = 1; i <= n; i++) {
22+
A[i] = min({a[i] / 3, lim}), sumA += A[i];
23+
B[i] = min({a[i] - 3 * A[i], lim - A[i]}), sumB += B[i];
24+
}
25+
if (sumA < lim) return false;
26+
27+
for (int i = 1; i <= n; i++) id[i] = i;
28+
29+
sort(id + 1, id + n + 1, [&](int x, int y) { return (lim - A[x] - B[x]) / 2 > (lim - A[y] - B[y]) / 2; });
30+
for (int p = 1; p <= n; p++) {
31+
int i = id[p], x = min({sumA - lim, (lim - A[i] - B[i]) / 2, A[i]});
32+
A[i] -= x, sumA -= x;
33+
B[i] += 3 * x, sumB += 3 * x;
34+
}
35+
36+
sort(id + 1, id + n + 1, [&](int x, int y) { return lim - A[x] - B[x] > lim - A[y] - B[y]; });
37+
for (int p = 1; p <= n; p++) {
38+
int i = id[p], x = min({sumA - lim, lim - A[i] - B[i], A[i]});
39+
A[i] -= x, sumA -= x;
40+
B[i] += 2 * x, sumB += 2 * x;
41+
}
42+
43+
for (int i = 1; i <= n; i++) {
44+
int x = min(sumA - lim, A[i]);
45+
A[i] -= x, sumA -= x;
46+
B[i] += x, sumB += x;
47+
}
48+
49+
return sumB >= lim;
50+
};
51+
52+
int l = 0, r = 1e7;
53+
while (l + 1 < r) {
54+
int mid = (l + r) >> 1;
55+
(check(mid) ? l : r) = mid;
56+
}
57+
58+
cout << l << endl;
59+
60+
return;
61+
}
62+
63+
int main() {
64+
ios::sync_with_stdio(false), cin.tie(nullptr);
65+
66+
int _ = 1;
67+
cin >> _;
68+
while (_--) solve();
69+
70+
return 0;
71+
}

HDOJ/1174-1007.cpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/**
2+
* @file 1174-1007.cpp
3+
* @author Macesuted (i@macesuted.moe)
4+
* @date 2025-07-25
5+
*
6+
* @copyright Copyright (c) 2025
7+
*
8+
*/
9+
10+
#include <bits/stdc++.h>
11+
using namespace std;
12+
13+
#define endl '\n'
14+
15+
mt19937_64 rnd(114514);
16+
17+
void solve(void) {
18+
int n;
19+
cin >> n;
20+
21+
map<int, uint64_t> delt;
22+
for (int i = 1, l, r; i <= n; i++) {
23+
cin >> l >> r;
24+
uint64_t v = rnd();
25+
delt[l] ^= v, delt[r + 1] ^= v;
26+
}
27+
28+
set<uint64_t> S;
29+
S.insert(0);
30+
uint64_t cur = 0;
31+
for (auto [x, v] : delt) S.insert(cur ^= v);
32+
33+
cout << S.size() << endl;
34+
35+
return;
36+
}
37+
38+
int main() {
39+
ios::sync_with_stdio(false), cin.tie(nullptr);
40+
41+
int _ = 1;
42+
cin >> _;
43+
while (_--) solve();
44+
45+
return 0;
46+
}

HDOJ/1174-1008.cpp

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/**
2+
* @file 1174-1008.cpp
3+
* @author Macesuted (i@macesuted.moe)
4+
* @date 2025-07-25
5+
*
6+
* @copyright Copyright (c) 2025
7+
*
8+
*/
9+
10+
#include <bits/stdc++.h>
11+
using namespace std;
12+
13+
#define endl '\n'
14+
#define maxn 1000005
15+
16+
int a[maxn];
17+
18+
void solve(void) {
19+
int n;
20+
string s;
21+
cin >> n >> s;
22+
23+
for (int i = 1; i <= n; i++) a[i] = (s[i - 1] - '0') ^ (i & 1);
24+
25+
vector<int> rec;
26+
for (int l = 1, r; l <= n; l = r + 1) {
27+
r = l;
28+
while (r + 1 <= n && a[l] == a[r + 1]) r++;
29+
rec.push_back(r - l + 1);
30+
}
31+
32+
if (rec.size() == 1) return cout << 0 << endl, void();
33+
if (rec.size() & 1) rec.front() += rec.back(), rec.pop_back();
34+
int cur[2] = {0, 0};
35+
for (int i = 0; i < (int)rec.size(); i++) cur[i & 1] += (rec[i] + 1) / 2;
36+
cout << min(cur[0], cur[1]) << endl;
37+
38+
return;
39+
}
40+
41+
int main() {
42+
ios::sync_with_stdio(false), cin.tie(nullptr);
43+
44+
int _ = 1;
45+
cin >> _;
46+
while (_--) solve();
47+
48+
return 0;
49+
}

0 commit comments

Comments
 (0)