Skip to content

Commit 45c3645

Browse files
committed
The 2024 ICPC Asia Seoul Regional Contest
1 parent 07d47b1 commit 45c3645

File tree

3 files changed

+225
-0
lines changed

3 files changed

+225
-0
lines changed

QOJ/10535.cpp

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/**
2+
* @file 10535.cpp
3+
* @author Macesuted ([email protected])
4+
* @date 2025-10-07
5+
*
6+
* @copyright Copyright (c) 2025
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 305
20+
21+
int a[maxn][maxn], tot[maxn];
22+
23+
void solve(void) {
24+
int n, m;
25+
cin >> n >> m;
26+
27+
for (int i = 1; i <= n; i++)
28+
for (int j = 1; j <= m; j++) cin >> a[i][j];
29+
30+
for (int j = 1; j <= m; j++) {
31+
map<int, int> rec;
32+
for (int i = 1; i <= n; i++) rec[tot[i]]++, rec[tot[i] += a[i][j]]--;
33+
int cur = 0, mx = 0;
34+
for (auto [p, v] : rec) mx = max(mx, cur += v);
35+
cout << mx << ' ';
36+
}
37+
38+
cout << endl;
39+
40+
return;
41+
}
42+
43+
bool mem2;
44+
45+
int main() {
46+
ios::sync_with_stdio(false), cin.tie(nullptr);
47+
#ifdef LOCAL
48+
cerr << "Memory Cost: " << abs(&mem1 - &mem2) / 1024. / 1024. << "MB" << endl;
49+
#endif
50+
51+
int _ = 1;
52+
while (_--) solve();
53+
54+
#ifdef LOCAL
55+
cerr << "Time Cost: " << clock() * 1000. / CLOCKS_PER_SEC << "MS" << endl;
56+
#endif
57+
return 0;
58+
}

QOJ/10536.cpp

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/**
2+
* @file 10536.cpp
3+
* @author Macesuted ([email protected])
4+
* @date 2025-10-07
5+
*
6+
* @copyright Copyright (c) 2025
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 1000005
20+
21+
int fa[maxn], siz[maxn], cnt[maxn], rx[maxn], ry[maxn];
22+
23+
int getfa(int x) { return fa[x] == x ? x : fa[x] = getfa(fa[x]); }
24+
25+
void solve(void) {
26+
int n;
27+
cin >> n;
28+
29+
for (int i = 1; i < maxn; i++) fa[i] = i, siz[i] = 1, cnt[i] = 0;
30+
31+
for (int i = 1; i <= n; i++) cin >> rx[i], rx[i]++;
32+
for (int i = 1; i <= n; i++) cin >> ry[i], ry[i]++;
33+
34+
for (int i = 1; i <= n; i++) {
35+
int x = getfa(rx[i]), y = getfa(ry[i]);
36+
if (x != y) fa[y] = x, siz[x] += siz[y], cnt[x] += cnt[y];
37+
cnt[x]++;
38+
}
39+
40+
int ans = 0;
41+
for (int i = 1; i < maxn; i++)
42+
if (fa[i] == i) ans += siz[i] - 1 + (cnt[i] >= siz[i]);
43+
44+
cout << ans << endl;
45+
46+
return;
47+
}
48+
49+
bool mem2;
50+
51+
int main() {
52+
ios::sync_with_stdio(false), cin.tie(nullptr);
53+
#ifdef LOCAL
54+
cerr << "Memory Cost: " << abs(&mem1 - &mem2) / 1024. / 1024. << "MB" << endl;
55+
#endif
56+
57+
int _ = 1;
58+
while (_--) solve();
59+
60+
#ifdef LOCAL
61+
cerr << "Time Cost: " << clock() * 1000. / CLOCKS_PER_SEC << "MS" << endl;
62+
#endif
63+
return 0

QOJ/10537.cpp

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
/**
2+
* @file 10537.cpp
3+
* @author Macesuted ([email protected])
4+
* @date 2025-10-07
5+
*
6+
* @copyright Copyright (c) 2025
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 2005
20+
21+
struct ST {
22+
int16_t a[4];
23+
int siz = 0;
24+
25+
bool find(int16_t v) { return count(a, a + siz, v); }
26+
void add(int16_t v) { return !v || find(v) || siz == 4 ? 0 : a[siz++] = v, void(); }
27+
void add(const ST& o) {
28+
for (int i = 0; i < o.siz; i++) add(o.a[i]);
29+
return;
30+
}
31+
};
32+
33+
int a[maxn][maxn];
34+
ST NW[maxn][maxn], NE[maxn][maxn], SW[maxn][maxn], SE[maxn][maxn];
35+
36+
void solve(void) {
37+
int n, m;
38+
cin >> n >> m;
39+
40+
for (int i = 1; i <= n; i++)
41+
for (int j = 1; j <= n; j++) {
42+
cin >> a[i][j];
43+
NW[i][j].add(a[i][j]), NE[i][j].add(a[i][j]), SW[i][j].add(a[i][j]), SE[i][j].add(a[i][j]);
44+
}
45+
46+
for (int i = 1; i <= n; i++)
47+
for (int j = 1; j <= n; j++) NW[i][j].add(NW[i - 1][j]), NW[i][j].add(NW[i][j - 1]);
48+
49+
for (int i = 1; i <= n; i++)
50+
for (int j = n; j >= 1; j--) NE[i][j].add(NE[i - 1][j]), NE[i][j].add(NE[i][j + 1]);
51+
52+
for (int i = n; i >= 1; i--)
53+
for (int j = 1; j <= n; j++) SW[i][j].add(SW[i + 1][j]), SW[i][j].add(SW[i][j - 1]);
54+
55+
for (int i = n; i >= 1; i--)
56+
for (int j = n; j >= 1; j--) SE[i][j].add(SE[i + 1][j]), SE[i][j].add(SE[i][j + 1]);
57+
58+
int ans = 0;
59+
for (int i = 2; i < n; i++)
60+
for (int j = 2; j < n; j++) {
61+
if (a[i][j]) continue;
62+
63+
array<ST, 4> rec = {NW[i - 1][j - 1], NE[i - 1][j + 1], SW[i + 1][j - 1], SE[i + 1][j + 1]};
64+
65+
sort(rec.begin(), rec.end(), [](const ST& a, const ST& b) -> bool { return a.siz < b.siz; });
66+
67+
bool brk = false;
68+
for (int id1 = 0; id1 < rec[0].siz && !brk; id1++) {
69+
int i1 = rec[0].a[id1];
70+
for (int id2 = 0; id2 < rec[1].siz && !brk; id2++) {
71+
int i2 = rec[1].a[id2];
72+
if (i1 != i2)
73+
for (int id3 = 0; id3 < rec[2].siz && !brk; id3++) {
74+
int i3 = rec[2].a[id3];
75+
if (i1 != i3 && i2 != i3)
76+
for (int id4 = 0; id4 < rec[3].siz && !brk; id4++) {
77+
int i4 = rec[3].a[id4];
78+
if (i1 != i4 && i2 != i4 && i3 != i4) ans++, brk = true;
79+
}
80+
}
81+
}
82+
}
83+
}
84+
85+
cout << ans << endl;
86+
87+
return;
88+
}
89+
90+
bool mem2;
91+
92+
int main() {
93+
ios::sync_with_stdio(false), cin.tie(nullptr);
94+
#ifdef LOCAL
95+
cerr << "Memory Cost: " << abs(&mem1 - &mem2) / 1024. / 1024. << "MB" << endl;
96+
#endif
97+
98+
int _ = 1;
99+
while (_--) solve();
100+
101+
#ifdef LOCAL
102+
cerr << "Time Cost: " << clock() * 1000. / CLOCKS_PER_SEC << "MS" << endl;
103+
#endif
104+
return 0

0 commit comments

Comments
 (0)