Skip to content

Commit cad4d89

Browse files
committed
Solve problems 1154[A, B, C, D, E] and 1157[A, B, C1, C2, D, E] from codeforces
1 parent 49daf52 commit cad4d89

12 files changed

+515
-0
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
int x[4];
6+
7+
int main() {
8+
for(int i = 0; i < 4; ++i)
9+
scanf("%d", x + i);
10+
11+
sort(x, x + 4);
12+
13+
do {
14+
int ab = x[0];
15+
int ac = x[1];
16+
int bc = x[2];
17+
int sum = x[3];
18+
19+
int a = (ab - bc + ac) / 2;
20+
int b = (bc - ac + ab) / 2;
21+
int c = (ac - ab + bc) / 2;
22+
23+
if(a + b + c == sum) {
24+
// cout << ab << ' ' << ac << ' ' << bc << ' ' << sum << endl;
25+
printf("%d %d %d", a, b, c);
26+
return 0;
27+
}
28+
} while(next_permutation(x, x + 4));
29+
30+
return 0;
31+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
int const N = 1e2 + 10;
6+
int n, a[N];
7+
set<int> nums, diffs;
8+
9+
int main() {
10+
scanf("%d", &n);
11+
for(int i = 0; i < n; ++i)
12+
scanf("%d", a + i), nums.insert(a[i]);
13+
sort(a, a + n);
14+
for(int i = 1; i < n; ++i) {
15+
if(a[i] - a[i-1] == 0)
16+
continue;
17+
diffs.insert(a[i] - a[i-1]);
18+
}
19+
20+
if(nums.size() == 1) {
21+
puts("0");
22+
} else if(nums.size() == 2) {
23+
if((*diffs.begin()) % 2 == 0)
24+
printf("%d\n", (*diffs.begin()) / 2);
25+
else
26+
printf("%d\n", (*diffs.begin()));
27+
} else if(nums.size() == 3 && diffs.size() == 1) {
28+
printf("%d\n", (*diffs.begin()));
29+
} else {
30+
puts("-1");
31+
}
32+
33+
return 0;
34+
}

CodeForces/1154C. Gourmet Cat.cpp

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
long long a, b, c;
6+
7+
/*
8+
1 b
9+
2 a
10+
3 a
11+
4 b
12+
5 c
13+
6 a
14+
7 c
15+
*/
16+
17+
bool can(long long str, long long mid) {
18+
long long days[8] = {0};
19+
for(int i = str; i <= 7; ++i)
20+
days[i] = 1;
21+
mid -= (7 - str + 1);
22+
long long weeks = mid / 7;
23+
for(int i = 1; i <= 7; ++i)
24+
days[i] += weeks;
25+
long long rem = mid % 7;
26+
for(int i = 1; i <= rem; ++i)
27+
days[i] += 1;
28+
29+
if(days[2] + days[3] + days[6] <= a && days[1] + days[4] <= b && days[5] + days[7] <= c)
30+
return true;
31+
return false;
32+
}
33+
34+
int main() {
35+
scanf("%lld %lld %lld", &a, &b, &c);
36+
37+
long long best = 0;
38+
for(int i = 1; i <= 7; ++i) {
39+
long long l = 0, r = 1e15, mid, res = -1;
40+
while(l <= r) {
41+
mid = (l + r) >> 1;
42+
if(can(i, mid))
43+
l = mid + 1, res = mid;
44+
else
45+
r = mid - 1;
46+
}
47+
best = max(best, res);
48+
}
49+
50+
printf("%lld\n", best);
51+
52+
return 0;
53+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
int const N = 2e5 + 10;
6+
int n, b, a, mxa, arr[N];
7+
8+
int main() {
9+
scanf("%d %d %d", &n, &b, &a);
10+
mxa = a;
11+
for(int i = 0; i < n; ++i)
12+
scanf("%d", arr + i);
13+
14+
int i = 0;
15+
for(; i < n; ++i) {
16+
if(arr[i] == 1 && a < mxa && b > 0) {
17+
++a, --b;
18+
} else if(a > 0) {
19+
--a;
20+
} else if(b > 0) {
21+
--b;
22+
} else {
23+
break;
24+
}
25+
}
26+
27+
printf("%d\n", i);
28+
29+
return 0;
30+
}

CodeForces/1154E. Two Teams.cpp

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
int const N = 2e5 + 10;
6+
int n, k, a[N], seg[4 * N], prv[N], nxt[N], res[N];
7+
vector<int> t1, t2;
8+
set<int> st_inc, st_dec;
9+
10+
void build(int at, int l, int r) {
11+
if(l == r) {
12+
seg[at] = l;
13+
return;
14+
}
15+
16+
int mid = (l + r) >> 1;
17+
build(at << 1, l, mid);
18+
build(at << 1 | 1, mid + 1, r);
19+
20+
if(a[seg[at << 1]] > a[seg[at << 1 | 1]])
21+
seg[at] = seg[at << 1];
22+
else
23+
seg[at] = seg[at << 1 | 1];
24+
}
25+
26+
int s, e;
27+
int get(int at, int l, int r) {
28+
if(l > e || r < s)
29+
return 0;
30+
31+
if(l >= s && r <= e)
32+
return seg[at];
33+
34+
int mid = (l + r) >> 1;
35+
36+
int gl = get(at << 1, l, mid);
37+
int gr = get(at << 1 | 1, mid + 1, r);
38+
39+
if(a[gl] > a[gr])
40+
return gl;
41+
return gr;
42+
}
43+
44+
int tar;
45+
void update(int at, int l, int r) {
46+
if(l > tar || r < tar)
47+
return;
48+
49+
if(l == r) {
50+
a[l] = -1;
51+
return;
52+
}
53+
54+
int mid = (l + r) >> 1;
55+
update(at << 1, l, mid);
56+
update(at << 1 | 1, mid + 1, r);
57+
58+
if(a[seg[at << 1]] > a[seg[at << 1 | 1]])
59+
seg[at] = seg[at << 1];
60+
else
61+
seg[at] = seg[at << 1 | 1];
62+
}
63+
64+
int main() {
65+
a[0] = -1;
66+
scanf("%d %d", &n, &k);
67+
for(int i = 1; i <= n; ++i) {
68+
scanf("%d", a + i);
69+
st_inc.insert(i);
70+
st_dec.insert(-i);
71+
nxt[i] = i + 1;
72+
prv[i] = i - 1;
73+
}
74+
75+
build(1, 1, n);
76+
77+
s = 1, e = n;
78+
for(int i = 0, mxi, flst, blst; t1.size() + t2.size() < n; ++i) {
79+
flst = blst = -1;
80+
mxi = get(1, 1, n);
81+
82+
for(int j = mxi, cnt = 0; cnt <= k && j <= n; ++cnt, j = nxt[j]) {
83+
tar = flst = j;
84+
update(1, 1, n);
85+
if(i % 2 == 0)
86+
t1.push_back(j);
87+
else
88+
t2.push_back(j);
89+
st_inc.erase(tar);
90+
st_dec.erase(-tar);
91+
}
92+
93+
for(int j = prv[mxi], cnt = 1; cnt <= k && j > 0; ++cnt, j = prv[j]) {
94+
tar = blst = j;
95+
update(1, 1, n);
96+
if(i % 2 == 0)
97+
t1.push_back(j);
98+
else
99+
t2.push_back(j);
100+
st_inc.erase(tar);
101+
st_dec.erase(-tar);
102+
}
103+
104+
if(flst != -1) {
105+
if(st_dec.upper_bound(-nxt[flst]) == st_dec.end())
106+
prv[nxt[flst]] = 0;
107+
else
108+
prv[nxt[flst]] = -(*st_dec.upper_bound(-nxt[flst]));
109+
}
110+
111+
if(blst != -1) {
112+
if(st_inc.upper_bound(prv[blst]) == st_inc.end())
113+
nxt[prv[blst]] = n + 1;
114+
else
115+
nxt[prv[blst]] = *st_inc.upper_bound(prv[blst]);
116+
}
117+
}
118+
119+
for(int i = 0; i < t1.size(); ++i)
120+
res[t1[i]] = 1;
121+
for(int i = 0; i < t2.size(); ++i)
122+
res[t2[i]] = 2;
123+
124+
for(int i = 1; i <= n; ++i)
125+
printf("%d", res[i]);
126+
puts("");
127+
128+
return 0;
129+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
int n;
6+
set<int> st;
7+
8+
int main() {
9+
scanf("%d", &n);
10+
11+
int res = 0;
12+
while(st.count(n) != 1) {
13+
st.insert(n);
14+
n += 1;
15+
while(n % 10 == 0)
16+
n /= 10;
17+
}
18+
19+
printf("%d\n", int(st.size()));
20+
21+
return 0;
22+
}

CodeForces/1157B. Long Number.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
int const N = 2e5 + 10;
6+
int n, f[10];
7+
char s[N];
8+
9+
int main() {
10+
scanf("%d\n%s", &n, s);
11+
for(int i = 1; i <= 9; ++i)
12+
scanf("%d", f + i);
13+
14+
bool conv = false;
15+
for(int i = 0; s[i] != '\0'; ++i) {
16+
if((conv && f[s[i] - '0'] >= s[i] - '0') || (!conv && f[s[i] - '0'] > s[i] - '0'))
17+
conv = true;
18+
if(conv && f[s[i] - '0'] < s[i] - '0')
19+
break;
20+
if(conv)
21+
s[i] = f[s[i] - '0'] + '0';
22+
}
23+
24+
puts(s);
25+
26+
return 0;
27+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
int const N = 2e5 + 10;
6+
int n, a[N];
7+
8+
int main() {
9+
scanf("%d", &n);
10+
for(int i = 0; i < n; ++i)
11+
scanf("%d", a + i);
12+
13+
int l = 0, r = n - 1, lst = -1;
14+
string res = "";
15+
16+
while(l <= r) {
17+
if(a[l] <= a[r] && a[l] >= lst) {
18+
lst = a[l++];
19+
res += 'L';
20+
} else if(a[r] <= a[l] && a[r] >= lst) {
21+
lst = a[r--];
22+
res += 'R';
23+
} else if(a[l] >= lst) {
24+
lst = a[l++];
25+
res += 'L';
26+
} else if(a[r] >= lst) {
27+
lst = a[r--];
28+
res += 'R';
29+
} else
30+
break;
31+
}
32+
33+
printf("%d\n", int(res.length()));
34+
puts(res.c_str());
35+
36+
return 0;
37+
}

0 commit comments

Comments
 (0)