Skip to content

Commit aa4989d

Browse files
committed
Codechef SnackDown 2021 - Online Qualifiers
1 parent 4f4bea9 commit aa4989d

File tree

5 files changed

+239
-0
lines changed

5 files changed

+239
-0
lines changed
+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#include <bits/stdc++.h>
2+
3+
4+
using namespace std;
5+
6+
int main() {
7+
int tc;
8+
cin >> tc;
9+
while (tc--) {
10+
int a, b, c;
11+
cin >> a >> b >> c;
12+
cout << ((a == 7) || (b == 7) || (c == 7) ? "YES" : "NO") << endl;
13+
}
14+
return 0;
15+
}
+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#include <bits/stdc++.h>
2+
3+
4+
using namespace std;
5+
6+
void solve() {
7+
int n;
8+
cin >> n;
9+
vector<int> b(n);
10+
for (int i = 0; i < n; ++i) {
11+
cin >> b[i];
12+
}
13+
vector<int> ids(n);
14+
iota(ids.begin(), ids.end(), 0);
15+
sort(ids.begin(), ids.end(), [&](int l, int r) {
16+
return b[l] < b[r];
17+
});
18+
int last = 0;
19+
vector<int> ans(n, 0);
20+
for (int i : ids) {
21+
ans[i] = last % b[i];
22+
if (last == ans[i])
23+
++last;
24+
}
25+
for (int i = 0; i < n; ++i) {
26+
cout << ans[i] << (i+1 == n ? '\n' : ' ');
27+
}
28+
}
29+
30+
int main() {
31+
int tc;
32+
cin >> tc;
33+
while (tc--) {
34+
solve();
35+
}
36+
return 0;
37+
}
+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
#include <bits/stdc++.h>
2+
3+
4+
using namespace std;
5+
6+
void solve() {
7+
int n, m;
8+
cin >> n >> m;
9+
vector<int> b(n, 0);
10+
vector<pair<int, int>> edges;
11+
vector<vector<int>> g(n);
12+
for (int i = 0; i < m; ++i) {
13+
int u, v;
14+
cin >> u >> v;
15+
--u, --v;
16+
if (u > v)
17+
swap(u, v);
18+
edges.emplace_back(u, v);
19+
}
20+
sort(edges.begin(), edges.end());
21+
edges.erase(unique(edges.begin(), edges.end()), edges.end());
22+
for (auto & [u, v] : edges) {
23+
++b[u];
24+
++b[v];
25+
g[u].push_back(v);
26+
g[v].push_back(u);
27+
}
28+
vector<int> ids;
29+
set<pair<int, int>> st;
30+
for (int i = 0; i < n; ++i) {
31+
st.insert(make_pair(b[i], i));
32+
}
33+
int biggest = 0;
34+
while (!st.empty()) {
35+
auto it = st.begin();
36+
int v = it->second;
37+
st.erase(it);
38+
biggest = max(biggest, b[v]);
39+
ids.push_back(v);
40+
b[v] = -1;
41+
for (int u : g[v]) {
42+
if (b[u] < 0) continue;
43+
st.erase(make_pair(b[u], u));
44+
--b[u];
45+
st.insert(make_pair(b[u], u));
46+
}
47+
}
48+
reverse(ids.begin(), ids.end());
49+
vector<int> ans(n);
50+
for (int i = 0; i < n; ++i) {
51+
ans[ids[i]] = i+1;
52+
}
53+
cout << biggest << '\n';
54+
for (int i = 0; i < n; ++i) {
55+
cout << ans[i] << (i+1 == n ? '\n' : ' ');
56+
}
57+
}
58+
59+
int main() {
60+
ios_base::sync_with_stdio(0);
61+
cin.tie(0);
62+
int tc;
63+
cin >> tc;
64+
while (tc--) {
65+
solve();
66+
}
67+
return 0;
68+
}
+90
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
// b[i] = max len so that b[i] < i+1 and s[0..len-1] = s[i-len+1..i]
6+
vector<int> prekmp(const string& s) {
7+
int n = s.size();
8+
vector<int> b(n, 0);
9+
for (int i = 1; i < n; ++i) {
10+
int j = b[i-1];
11+
while (j > 0 && s[i] != s[j]) j = b[j - 1];
12+
if (s[i] == s[j])
13+
++j;
14+
b[i] = j;
15+
}
16+
return b;
17+
}
18+
19+
vector<int> kmp(const string& s, const string& p, const vector<int>& b) {
20+
int n = s.size(), m = p.size();
21+
vector<int> ans(n);
22+
int len = 0;
23+
for (int i = 0; i < n; ++i) {
24+
while (len > 0 && p[len] != s[i]) len = b[len-1];
25+
if (s[i] == p[len])
26+
++len;
27+
ans[i] = len;
28+
if (len == m) {
29+
len = b[len-1];
30+
}
31+
}
32+
return ans;
33+
}
34+
35+
// z[i] = max len so that s[0..len-1] = s[i..i+len-1]
36+
vector<int> zstring(const string& s) {
37+
int n = s.size();
38+
vector<int> z(n);
39+
for (int i = 1, l = 0, r = 0; i < n; ++i) {
40+
if (r <= i) {
41+
l = r = i;
42+
while (r < n && s[r] == s[r-l]) ++r;
43+
z[i] = r-l;
44+
} else {
45+
if (i + z[i-l] < r)
46+
z[i] = z[i-l];
47+
else {
48+
l = i;
49+
while (r < n && s[r] == s[r-l]) ++r;
50+
z[i] = r-l;
51+
}
52+
}
53+
}
54+
z[0] = n;
55+
return z;
56+
}
57+
58+
void solve() {
59+
string a, b, x;
60+
cin >> a >> b >> x;
61+
auto p = prekmp(a);
62+
auto suf = kmp(x, a, p);
63+
auto z = zstring(b + x);
64+
int m = b.size();
65+
vector<int> best(a.size()+1, -1);
66+
for (int i = -1; i < (int)x.size(); ++i) {
67+
int lef = (i >= 0) ? suf[i] : 0;
68+
int rig = (i + 1 < (int)x.size()) ? min(z[i+1+m], m) : 0;
69+
best[lef] = max(best[lef], rig);
70+
}
71+
long long ans = 0;
72+
for (int i = (int)a.size(); i >= 0; --i) {
73+
ans += best[i] + 1;
74+
if (i > 0) {
75+
best[p[i-1]] = max(best[p[i-1]], best[i]);
76+
}
77+
}
78+
cout << ans << '\n';
79+
}
80+
81+
int main() {
82+
ios_base::sync_with_stdio(0);
83+
cin.tie(0);
84+
int tc;
85+
cin >> tc;
86+
while (tc--) {
87+
solve();
88+
}
89+
return 0;
90+
}
+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#include <bits/stdc++.h>
2+
3+
4+
using namespace std;
5+
6+
void solve() {
7+
vector<int> cnt(3, 0);
8+
for (int i = 0; i < 5; ++i) {
9+
int x;
10+
cin >> x;
11+
++cnt[x];
12+
}
13+
if (cnt[1] > cnt[2]) {
14+
cout << "INDIA\n";
15+
} else if (cnt[1] < cnt[2]) {
16+
cout << "ENGLAND\n";
17+
} else {
18+
cout << "DRAW\n";
19+
}
20+
}
21+
22+
int main() {
23+
int tc;
24+
cin >> tc;
25+
while (tc--) {
26+
solve();
27+
}
28+
return 0;
29+
}

0 commit comments

Comments
 (0)