Skip to content

Commit 3c0f9df

Browse files
committed
CCPC Final 2019
1 parent 1a03399 commit 3c0f9df

3 files changed

Lines changed: 242 additions & 0 deletions

File tree

QOJ/11222.cpp

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/**
2+
* @file 11222.cpp
3+
* @author Macesuted (i@macesuted.moe)
4+
* @date 2025-10-19
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+
void solve(void) {
16+
int n;
17+
cin >> n;
18+
cout << "YES" << endl;
19+
for (int i = 1; i <= n; i++)
20+
for (int j = i; j <= n; j++) {
21+
cout << i << ' ' << j << ' ';
22+
cout << 1 << ' ' << j << ' ' << i << ' ';
23+
cout << 2 << ' ' << j << ' ' << i << endl;
24+
}
25+
return;
26+
}
27+
28+
int main() {
29+
ios::sync_with_stdio(false), cin.tie(nullptr);
30+
31+
int _ = 1;
32+
cin >> _;
33+
for (int i = 1; i <= _; i++) cout << "Case #" << i << ":" << endl, solve();
34+
35+
return 0;
36+
}

QOJ/11223.cpp

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
/**
2+
* @file 11223.cpp
3+
* @author Macesuted (i@macesuted.moe)
4+
* @date 2025-10-19
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+
using tiii = tuple<int, int, int>;
16+
17+
void solve(void) {
18+
int n;
19+
cin >> n;
20+
21+
string code;
22+
for (int i = 1; i <= n; i++) {
23+
string line;
24+
if (i == 1) getline(cin, line);
25+
getline(cin, line);
26+
code.append(line), code.push_back(' ');
27+
}
28+
29+
unordered_map<string, int> dict;
30+
dict["double"] = 1;
31+
dict["string"] = 2;
32+
33+
stringstream ssin(code);
34+
string s;
35+
while (ssin >> s)
36+
if (s == "message") ssin >> s, dict[s] = dict.size() + 1;
37+
38+
int m = dict.size();
39+
40+
vector<vector<tiii>> message(m + 1);
41+
42+
ssin = stringstream(code);
43+
while (ssin >> s) {
44+
assert(s == "message");
45+
ssin >> s;
46+
int mid = dict[s];
47+
assert(mid);
48+
49+
ssin >> s;
50+
assert(s == "{");
51+
52+
while (ssin >> s && s != "}") {
53+
int label = (s == "required" ? 1 : s == "optional" ? 2 : 3);
54+
55+
ssin >> s;
56+
int type = dict[s];
57+
assert(type);
58+
59+
ssin >> s;
60+
ssin >> s;
61+
assert(s == "=");
62+
63+
int fieldNumber;
64+
ssin >> fieldNumber;
65+
66+
ssin >> s;
67+
assert(s == ";");
68+
69+
message[mid].emplace_back(label, type, fieldNumber);
70+
}
71+
}
72+
73+
for (int i = 1; i <= m; i++)
74+
sort(message[i].begin(), message[i].end(), [](const tiii& a, const tiii& b) -> bool { return get<2>(a) < get<2>(b); });
75+
76+
auto _ = [&](int x, int y) -> int { return (x - 1) * m + y; };
77+
78+
vector<bool> invalid(m * m + 1);
79+
vector<vector<int>> graph(m * m + 1);
80+
81+
for (int i = 2; i <= m; i++) invalid[_(1, i)] = invalid[_(i, 1)] = true;
82+
for (int i = 3; i <= m; i++) invalid[_(2, i)] = true;
83+
84+
for (int i = 3; i <= m; i++)
85+
for (int j = 3; j <= m; j++) {
86+
if (i == j) continue;
87+
88+
for (size_t ki = 0, kj = 0; ki < message[i].size(); ki++) {
89+
while (kj < message[j].size() && get<2>(message[i][ki]) != get<2>(message[j][kj])) {
90+
if (get<0>(message[j][kj]) == 1) invalid[_(i, j)] = true;
91+
kj++;
92+
}
93+
if (kj == message[j].size()) {
94+
invalid[_(i, j)] = true;
95+
break;
96+
}
97+
98+
graph[_(get<1>(message[i][ki]), get<1>(message[j][kj]))].push_back(_(i, j));
99+
100+
int mi = get<0>(message[i][ki]), mj = get<0>(message[j][kj]);
101+
if (mi > mj) invalid[_(i, j)] = true;
102+
103+
kj++;
104+
}
105+
}
106+
107+
queue<int> que;
108+
for (int i = 1; i <= m * m; i++)
109+
if (invalid[i]) que.push(i);
110+
while (!que.empty()) {
111+
int p = que.front();
112+
que.pop();
113+
for (auto q : graph[p])
114+
if (!invalid[q]) invalid[q] = true, que.push(q);
115+
}
116+
117+
int q;
118+
cin >> q;
119+
while (q--) {
120+
string A, B;
121+
cin >> A >> B;
122+
cout << "Wire-format ";
123+
if (invalid[_(dict[A], dict[B])] || invalid[_(dict[B], dict[A])]) cout << "in";
124+
cout << "compatible." << endl;
125+
}
126+
127+
return;
128+
}
129+
130+
int main() {
131+
ios::sync_with_stdio(false), cin.tie(nullptr);
132+
133+
int _ = 1;
134+
solve();
135+
136+
return 0;
137+
}

QOJ/11224.cpp

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/**
2+
* @file 11224.cpp
3+
* @author Macesuted (i@macesuted.moe)
4+
* @date 2025-10-19
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+
#define maxn 200005
16+
17+
using pii = pair<int, int>;
18+
19+
vector<vector<int>> graph;
20+
21+
set<pii>* S[maxn];
22+
int ans[maxn];
23+
24+
void insert(set<pii>* S, int l, int r) {
25+
auto p = S->lower_bound({l, l});
26+
if (p != S->end() && p->first == r + 1) r = p->second, p = S->erase(p);
27+
if (p != S->begin() && (--p)->second == l - 1) l = p->first, S->erase(p);
28+
S->emplace(l, r);
29+
return;
30+
}
31+
32+
void dfs(int p, int pre = -1) {
33+
S[p] = nullptr;
34+
int ch = -1;
35+
for (auto q : graph[p]) {
36+
if (q == pre) continue;
37+
dfs(q, p);
38+
if (!S[p] || S[p]->size() < S[q]->size()) S[p] = S[ch = q];
39+
}
40+
for (auto q : graph[p]) {
41+
if (q == pre || q == ch) continue;
42+
for (auto [l, r] : *S[q]) insert(S[p], l, r);
43+
}
44+
if (!S[p]) S[p] = new set<pii>;
45+
insert(S[p], p, p);
46+
ans[p] = S[p]->size();
47+
return;
48+
}
49+
50+
void solve(void) {
51+
int n;
52+
cin >> n;
53+
graph.clear(), graph.resize(n + 1);
54+
for (int i = 1, x, y; i < n; i++) cin >> x >> y, graph[x].push_back(y), graph[y].push_back(x);
55+
dfs(1);
56+
for (int i = 1; i <= n; i++) cout << ' ' << ans[i];
57+
cout << endl;
58+
return;
59+
}
60+
61+
int main() {
62+
ios::sync_with_stdio(false), cin.tie(nullptr);
63+
64+
int _ = 1;
65+
cin >> _;
66+
for (int i = 1; i <= _; i++) cout << "Case #" << i << ":", solve();
67+
68+
return 0;
69+
}

0 commit comments

Comments
 (0)