Skip to content

Commit 48b0819

Browse files
committed
Petrozavodsk Winter 2021. Day 8. Belarusian SU Contest
1 parent fd045a0 commit 48b0819

2 files changed

Lines changed: 105 additions & 0 deletions

File tree

QOJ/1085.cpp

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/**
2+
* @file 1085.cpp
3+
* @author Macesuted (i@macesuted.moe)
4+
* @date 2026-01-24
5+
*
6+
* @copyright Copyright (c) 2026
7+
*
8+
*/
9+
10+
#include <bits/stdc++.h>
11+
using namespace std;
12+
13+
#define endl '\n'
14+
15+
#define maxn 1000005
16+
#define maxlgn 25
17+
#define mod 998244353
18+
19+
int64_t f[maxn], g[maxlgn];
20+
int lg2[maxn];
21+
22+
void solve(void) {
23+
int n;
24+
cin >> n;
25+
26+
f[1] = g[0] = 1;
27+
int64_t sum = 2;
28+
for (int i = 2; i <= n; i++) {
29+
f[i] = sum;
30+
for (int j = 0; j < lg2[i]; j++)
31+
if (i >> j & 1) f[i] = (f[i] + mod - g[j]) % mod;
32+
g[lg2[i]] = (g[lg2[i]] + f[i]) % mod, sum = (sum + f[i]) % mod;
33+
}
34+
35+
cout << (sum + mod - 1) % mod << endl;
36+
37+
return;
38+
}
39+
40+
int main() {
41+
ios::sync_with_stdio(false), cin.tie(nullptr);
42+
43+
for (int i = 2; i < maxn; i++) lg2[i] = lg2[i >> 1] + 1;
44+
45+
int _ = 1;
46+
while (_--) solve();
47+
48+
return 0;
49+
}

QOJ/1092.cpp

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/**
2+
* @file 1092.cpp
3+
* @author Macesuted (i@macesuted.moe)
4+
* @date 2026-01-24
5+
*
6+
* @copyright Copyright (c) 2026
7+
*
8+
*/
9+
10+
#include <bits/stdc++.h>
11+
using namespace std;
12+
13+
#define endl '\n'
14+
15+
#define maxn 300005
16+
17+
vector<int> graph[maxn];
18+
int col[maxn], cnt[3];
19+
20+
void dfs(int p, int c) {
21+
cnt[col[p] = c]++;
22+
for (auto q : graph[p])
23+
if (!col[q]) dfs(q, 3 - c);
24+
return;
25+
}
26+
27+
void solve(void) {
28+
int n, m;
29+
cin >> n >> m;
30+
for (int i = 1, x, y; i <= m; i++) cin >> x >> y, graph[x].push_back(y), graph[y].push_back(x);
31+
32+
int ans = 0;
33+
for (int i = 1; i <= n; i++)
34+
if (!col[i]) {
35+
cnt[1] = cnt[2] = 0;
36+
dfs(i, 1);
37+
ans += min(cnt[1], cnt[2]);
38+
}
39+
40+
for (int i = 1; i <= n; i++)
41+
for (auto j : graph[i])
42+
if (col[i] == col[j]) return cout << -1 << endl, void();
43+
44+
cout << max(1, ans) << endl;
45+
46+
return;
47+
}
48+
49+
int main() {
50+
ios::sync_with_stdio(false), cin.tie(nullptr);
51+
52+
int _ = 1;
53+
while (_--) solve();
54+
55+
return 0;
56+
}

0 commit comments

Comments
 (0)