Skip to content

Commit 8d1930a

Browse files
committed
CF Educational 20
1 parent e2c8969 commit 8d1930a

File tree

7 files changed

+335
-0
lines changed

7 files changed

+335
-0
lines changed

codeforces/edu20/a.cpp

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
const int N = 105;
6+
7+
int x[N][N];
8+
9+
int main() {
10+
int n, k;
11+
scanf("%d %d", &n, &k);
12+
for (int i = 0; i < n; i++) {
13+
for (int j = 0; j < n; j++) {
14+
if (x[i][j]) continue;
15+
if (k == 0) continue;
16+
if (i != j && k < 2) continue;
17+
x[i][j] = 1;
18+
k--;
19+
if (i != j) {
20+
x[j][i] = 1;
21+
k--;
22+
}
23+
}
24+
}
25+
if (k) {
26+
puts("-1");
27+
return 0;
28+
}
29+
for (int i = 0; i < n; i++) {
30+
for (int j = 0; j < n; j++)
31+
printf("%d ", x[i][j]);
32+
printf("\n");
33+
}
34+
return 0;
35+
}

codeforces/edu20/b.cpp

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
const int N = 2e5 + 6;
6+
int a[N], ans[N];
7+
8+
int main() {
9+
int n;
10+
scanf("%d", &n);
11+
int last = -N;
12+
for (int i = 0; i < n; i++) {
13+
scanf("%d", a+i);
14+
if (a[i] == 0)
15+
last = i;
16+
ans[i] = i-last;
17+
}
18+
last = n + N;
19+
for (int i = n-1; i >= 0; i--) {
20+
if (a[i] == 0)
21+
last = i;
22+
ans[i] = min(ans[i], last-i);
23+
}
24+
for (int i = 0; i < n; i++)
25+
printf("%d ", ans[i]);
26+
printf("\n");
27+
return 0;
28+
}

codeforces/edu20/c.cpp

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
int main() {
6+
long long n, k;
7+
cin >> n >> k;
8+
if (k > 1e6) {
9+
puts("-1");
10+
return 0;
11+
}
12+
long long ans = -1;
13+
long long mi = k * (k + 1) / 2;
14+
for (long long i = 1; i * i <= n; i++) {
15+
if (n % i) continue;
16+
long long x = n/i;
17+
if (x >= mi)
18+
ans = max(ans, i);
19+
if (i >= mi)
20+
ans = max(ans, x);
21+
}
22+
if (ans <= 0)
23+
puts("-1");
24+
else {
25+
for (int i = 1; i < k; i++) {
26+
printf("%I64d ", 1LL * i * ans);
27+
n -= ans * i;
28+
}
29+
printf("%I64d\n", n);
30+
}
31+
return 0;
32+
}

codeforces/edu20/d.cpp

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
string s;
6+
int h;
7+
bool can(int x) {
8+
int cnt = 0, last = -1, now = 0;
9+
for (int i = 0; i < s.size(); i++) {
10+
now++;
11+
if (now > x) {
12+
now = i-last;
13+
cnt++;
14+
}
15+
if (now > x)
16+
return 0;
17+
if (s[i] == ' ' || s[i] == '-')
18+
last = i;
19+
}
20+
if (now > 0)
21+
cnt++;
22+
return cnt <= h;
23+
}
24+
25+
int main() {
26+
cin >> h;
27+
getline(cin, s);
28+
if (s.empty())
29+
getline(cin, s);
30+
int l = 0, r = s.size();
31+
while (l < r) {
32+
int mid = (l + r)/2;
33+
if (can(mid))
34+
r = mid;
35+
else
36+
l = mid+1;
37+
}
38+
printf("%d\n", l);
39+
return 0;
40+
}

codeforces/edu20/e.cpp

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
const int N = 1024;
6+
7+
char v[N][N + N];
8+
char s[N];
9+
10+
int main() {
11+
int n, k;
12+
scanf("%d %d", &n, &k);
13+
scanf("%s", s);
14+
v[0][N] = '#';
15+
for (int i = 0; i < n; i++) {
16+
for (int j = -k+1; j < k; j++) {
17+
if (!v[i][j+N]) continue;
18+
if (s[i] == 'W')
19+
v[i+1][j+N+1] = 'W';
20+
else if (s[i] == 'L')
21+
v[i+1][j+N-1] = 'L';
22+
else if (s[i] == 'D')
23+
v[i+1][j+N] = 'D';
24+
else {
25+
v[i+1][j+N+1] = 'W';
26+
v[i+1][j+N] = 'D';
27+
v[i+1][j+N-1] = 'L';
28+
}
29+
}
30+
}
31+
if (!v[n][N+k] && !v[n][N-k])
32+
puts("NO");
33+
else {
34+
int now = v[n][N+k] ? N+k : N-k;
35+
for (int i = n; i > 0; i--) {
36+
char c = s[i-1] = v[i][now];
37+
if (c == 'W')
38+
now--;
39+
else if (c == 'L')
40+
now++;
41+
}
42+
s[n] = 0;
43+
printf("%s\n", s);
44+
}
45+
return 0;
46+
}

codeforces/edu20/f.cpp

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
const int N = 1e5 + 5, mod = 1e9 + 7;
6+
7+
long long powmod(long long b, long long p) {
8+
long long r = 1;
9+
for (; p; p >>= 1, b = b * b % mod)
10+
if (p & 1) r = r * b % mod;
11+
return r;
12+
}
13+
14+
int a[N], c[N];
15+
16+
int main() {
17+
int n;
18+
scanf("%d", &n);
19+
for (int i = 0; i < n; i++) {
20+
scanf("%d", a+i);
21+
c[a[i]]++;
22+
}
23+
for (int i = 1; i < N; i++) {
24+
for (int j = i+i; j < N; j += i) if (c[j])
25+
c[i] += c[j];
26+
if (c[i])
27+
c[i] = powmod(2, c[i]) - 1;
28+
}
29+
for (int i = N-1; i > 0; i--) {
30+
for (int j = i + i; j < N; j += i) if (c[j]) {
31+
c[i] -= c[j];
32+
if (c[i] < 0) c[i] += mod;
33+
}
34+
}
35+
c[1] %= mod;
36+
if (c[1] < 0) c[1] += mod;
37+
printf("%d\n", c[1]);
38+
return 0;
39+
}

codeforces/edu20/g.cpp

+115
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
const int inf = 1e9 + 7, N = 1e5 + 5;
5+
6+
struct seg_tree {
7+
int n;
8+
vector< int > a, mi, lz;
9+
seg_tree(const vector< int > &v) : a(v) {
10+
n = a.size();
11+
mi.resize(n * 4);
12+
lz.resize(n * 4);
13+
build(1, 0, n);
14+
}
15+
void build(int id, int l, int r) {
16+
lz[id] = 0;
17+
if (r-l < 2) {
18+
mi[id] = a[l];
19+
return;
20+
}
21+
int mid = (l + r) >> 1, il = id << 1, ir = il | 1;
22+
build(il, l, mid);
23+
build(ir, mid, r);
24+
mi[id] = min(mi[il], mi[ir]);
25+
}
26+
void shift(int id) {
27+
if (lz[id]) {
28+
int il = id << 1, ir = il | 1;
29+
mi[il] = lz[il] = mi[ir] = lz[ir] = lz[id];
30+
lz[id] = 0;
31+
}
32+
}
33+
void upd(int x, int y, int v, int id, int l, int r) {
34+
if (x >= r || l >= y) return;
35+
if (x <= l && r <= y) {
36+
mi[id] = lz[id] = v;
37+
return;
38+
}
39+
shift(id);
40+
int mid = (l + r) >> 1, il = id << 1, ir = il | 1;
41+
upd(x, y, v, il, l, mid);
42+
upd(x, y, v, ir, mid, r);
43+
mi[id] = min(mi[il], mi[ir]);
44+
}
45+
int get(int x, int y, int id, int l, int r) {
46+
if (x >= r || l >= y) return inf;
47+
if (x <= l && r <= y) {
48+
return mi[id];
49+
}
50+
shift(id);
51+
int mid = (l + r) >> 1, il = id << 1, ir = il | 1;
52+
return min(get(x, y, il, l, mid), get(x, y, ir, mid, r));
53+
}
54+
};
55+
56+
vector< int > a;
57+
vector< int > b;
58+
int l[N], r[N];
59+
int t[N], v[N];
60+
61+
int main() {
62+
a.clear();
63+
b.clear();
64+
int n, k, q;
65+
scanf("%d %d", &n, &k);
66+
int mall = inf;
67+
for (int i = 0; i < n; i++) {
68+
int x;
69+
scanf("%d", &x);
70+
a.push_back(x);
71+
mall = min(mall, x);
72+
}
73+
seg_tree seg(a);
74+
vector< int > batas;
75+
batas.push_back(0);
76+
batas.push_back(n * k);
77+
scanf("%d", &q);
78+
for (int i = 0; i < q; i++) {
79+
scanf("%d %d %d", t+i, l+i, r+i);
80+
l[i]--;
81+
if (t[i] == 1)
82+
scanf("%d", v+i);
83+
batas.push_back(l[i]);
84+
batas.push_back(r[i]);
85+
}
86+
sort(batas.begin(), batas.end());
87+
batas.erase(unique(batas.begin(), batas.end()), batas.end());
88+
for (int i = 0; i + 1 < batas.size(); i++) {
89+
int le = batas[i], ri = batas[i+1];
90+
if (ri-le >= n)
91+
b.push_back(mall);
92+
else {
93+
ri %= n;
94+
if (ri == 0) ri = n;
95+
le %= n;
96+
if (le < ri)
97+
b.push_back(seg.get(le, ri, 1, 0, n));
98+
else
99+
b.push_back(min(seg.get(le, n, 1, 0, n), seg.get(0, ri, 1, 0, n)));
100+
}
101+
}
102+
seg_tree smi(b);
103+
for (int i = 0; i < q; i++) {
104+
l[i] = lower_bound(batas.begin(), batas.end(), l[i]) - batas.begin();
105+
r[i] = lower_bound(batas.begin(), batas.end(), r[i]) - batas.begin();
106+
assert (l[i] >= 0 && l[i] < b.size());
107+
assert (r[i] > 0 && r[i] <= b.size());
108+
assert (l[i] < r[i]);
109+
if (t[i] == 1)
110+
smi.upd(l[i], r[i], v[i], 1, 0, b.size());
111+
else
112+
printf("%d\n", smi.get(l[i], r[i], 1, 0, b.size()));
113+
}
114+
return 0;
115+
}

0 commit comments

Comments
 (0)