Skip to content

Commit 30ed279

Browse files
committed
Revamp Readme and Update Missing Code for Div4 PCD
1 parent 17c497b commit 30ed279

File tree

7 files changed

+394
-19
lines changed

7 files changed

+394
-19
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#include "bits/stdc++.h"
2+
3+
using i64 = long long;
4+
5+
void solve()
6+
{
7+
int n;
8+
std::string s;
9+
std::cin >> n >> s;
10+
11+
int x = 0, y = 0;
12+
int ans = 0;
13+
for (int i = 0; i < n; i++)
14+
{
15+
if (s[i] == 'L')
16+
x--;
17+
else if (s[i] == 'R')
18+
x++;
19+
else if (s[i] == 'U')
20+
y++;
21+
else
22+
y--;
23+
24+
if (x == 1 and y == 1)
25+
ans = 1;
26+
}
27+
28+
std::cout << (ans ? "YES\n" : "NO\n");
29+
}
30+
31+
int main()
32+
{
33+
std::ios::sync_with_stdio(false);
34+
std::cin.tie(nullptr);
35+
36+
int t = 1;
37+
std::cin >> t;
38+
39+
while (t--)
40+
solve();
41+
42+
return 0;
43+
}
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 i64 = long long;
4+
5+
void solve()
6+
{
7+
int n;
8+
std::string s;
9+
std::cin >> n >> s;
10+
11+
int ans = n;
12+
13+
int i = 0, j = n - 1;
14+
while (i < j)
15+
{
16+
if (s[i] != s[j])
17+
ans -= 2, i++, j--;
18+
else
19+
break;
20+
}
21+
22+
std::cout << ans << "\n";
23+
}
24+
25+
int main()
26+
{
27+
std::ios::sync_with_stdio(false);
28+
std::cin.tie(nullptr);
29+
30+
int t = 1;
31+
std::cin >> t;
32+
33+
while (t--)
34+
solve();
35+
36+
return 0;
37+
}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
#include "bits/stdc++.h"
2+
3+
using i64 = long long;
4+
5+
void solve()
6+
{
7+
int n, q;
8+
std::cin >> n >> q;
9+
10+
std::set<int> pos;
11+
std::vector<int> a(n);
12+
for (int i = 0; i < n; i++)
13+
{
14+
std::cin >> a[i];
15+
if (a[i] / 10 > 0)
16+
pos.emplace(i);
17+
}
18+
19+
auto sum = [&](int x)
20+
{
21+
int sum = 0;
22+
while (x != 0)
23+
{
24+
sum += x % 10;
25+
x /= 10;
26+
}
27+
28+
return sum;
29+
};
30+
31+
while (q--)
32+
{
33+
int t;
34+
std::cin >> t;
35+
36+
if (t == 1)
37+
{
38+
int l, r;
39+
std::cin >> l >> r;
40+
l--, r--;
41+
42+
auto start = pos.lower_bound(l);
43+
auto end = pos.upper_bound(r);
44+
45+
std::vector<int> rem;
46+
for (auto it = start; it != end; it++)
47+
{
48+
a[*it] = sum(a[*it]);
49+
if (a[*it] / 10 == 0)
50+
rem.emplace_back(*it);
51+
}
52+
53+
for (auto del : rem)
54+
pos.erase(del);
55+
}
56+
else
57+
{
58+
int x;
59+
std::cin >> x;
60+
61+
std::cout << a[x - 1] << "\n";
62+
}
63+
}
64+
}
65+
66+
int main()
67+
{
68+
std::ios::sync_with_stdio(false);
69+
std::cin.tie(nullptr);
70+
71+
int t = 1;
72+
std::cin >> t;
73+
74+
while (t--)
75+
solve();
76+
77+
return 0;
78+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#include "bits/stdc++.h"
2+
3+
using i64 = long long;
4+
5+
void solve()
6+
{
7+
int n, c;
8+
std::cin >> n >> c;
9+
10+
std::vector<int> a(n), b(n);
11+
for (int i = 0; i < n; i++)
12+
{
13+
std::cin >> a[i];
14+
b[i] = a[i] + i + 1;
15+
}
16+
17+
std::sort(std::begin(b), std::end(b));
18+
int ans = 0;
19+
20+
for (auto &x : b)
21+
{
22+
if (x > c)
23+
break;
24+
25+
ans++;
26+
c -= x;
27+
}
28+
29+
std::cout << ans << "\n";
30+
}
31+
32+
int main()
33+
{
34+
std::ios::sync_with_stdio(false);
35+
std::cin.tie(nullptr);
36+
37+
int t = 1;
38+
std::cin >> t;
39+
40+
while (t--)
41+
solve();
42+
43+
return 0;
44+
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
#include "bits/stdc++.h"
2+
3+
using i64 = long long;
4+
5+
void solve()
6+
{
7+
int n, c;
8+
std::cin >> n >> c;
9+
10+
std::vector<int> a(n);
11+
std::vector<std::array<i64, 2>> b(n);
12+
13+
for (int i = 0; i < n; i++)
14+
{
15+
std::cin >> a[i];
16+
b[i] = {a[i] + std::min(i + 1, n - i), a[i] + i + 1};
17+
}
18+
19+
std::sort(std::begin(b), std::end(b));
20+
std::vector<i64> pref(n);
21+
pref[0] = b[0][0];
22+
23+
for (int i = 1; i < n; i++)
24+
pref[i] = pref[i - 1] + b[i][0];
25+
26+
int ans = 0;
27+
for (int i = 0; i < n; i++)
28+
{
29+
if (b[i][1] > c)
30+
continue;
31+
32+
int have = c;
33+
int left = 0, right = n - 1;
34+
int cur_ans = -1;
35+
36+
while (left <= right)
37+
{
38+
int mid = std::midpoint(left, right);
39+
if (mid >= i)
40+
have = c + b[i][0] - b[i][1];
41+
else
42+
have = c - b[i][1];
43+
44+
if (pref[mid] <= have)
45+
cur_ans = mid, left = mid + 1;
46+
else
47+
right = mid - 1;
48+
}
49+
50+
ans = std::max(ans, cur_ans + 2 - (cur_ans >= i));
51+
}
52+
53+
std::cout << ans << '\n';
54+
}
55+
56+
int main()
57+
{
58+
std::ios::sync_with_stdio(false);
59+
std::cin.tie(nullptr);
60+
61+
int t = 1;
62+
std::cin >> t;
63+
64+
while (t--)
65+
solve();
66+
67+
return 0;
68+
}
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
#include "bits/stdc++.h"
2+
3+
using i64 = long long;
4+
5+
template<typename T, class F = std::function<T(const T&, const T&)>>
6+
struct SegmentTree
7+
{
8+
const int n;
9+
const T null_val;
10+
std::vector<T> tree;
11+
F f;
12+
13+
template <typename G>
14+
SegmentTree(const std::vector<G> in, const T null_val, const F& f)
15+
: n(int(std::size(in))), tree(2 * n, null_val), f(f), null_val(null_val)
16+
{
17+
for (int i = 0; i < n; ++i)
18+
tree[i + n] = in[i];
19+
20+
for (int i = n - 1; i >= 0; i--)
21+
tree[i] = f(tree[i << 1], tree[i << 1 | 1]);
22+
}
23+
void add(int id, T x)
24+
{
25+
T val = x - get(id, id);
26+
update(id, val);
27+
}
28+
void update(int id, T val)
29+
{
30+
for (tree[id += n] = val; id >>= 1; )
31+
tree[id] = f(tree[id << 1], tree[(id << 1) | 1]);
32+
}
33+
T get(int l, int r)
34+
{
35+
T resL = null_val, resR = null_val;
36+
for (l += n, r += n + 1; l < r; l >>= 1, r >>= 1)
37+
{
38+
if (l & 1)
39+
resL = f(resL, tree[l++]);
40+
if (r & 1)
41+
resR = f(tree[--r], resR);
42+
}
43+
44+
return f(resL, resR);
45+
}
46+
};
47+
48+
void solve()
49+
{
50+
int n, c;
51+
std::cin >> n >> c;
52+
53+
std::vector<int> a(n), cost(n);
54+
std::vector<std::array<i64, 2>> b(n);
55+
56+
for (int i = 0; i < n; i++)
57+
{
58+
std::cin >> a[i];
59+
b[i] = {a[i] + std::min(i + 1, n - i), a[i] + i + 1};
60+
cost[i] = a[i] + std::min(i + 1, n - i);
61+
}
62+
63+
std::sort(std::begin(b), std::end(b));
64+
std::sort(std::begin(cost), std::end(cost));
65+
SegmentTree<i64> st(cost, 0, [&](auto x, auto y){ return x + y; });
66+
67+
int ans = 0;
68+
for (int i = 0; i < n; i++)
69+
{
70+
if (b[i][1] > c)
71+
continue;
72+
73+
int have = c - b[i][1];
74+
int left = 0, right = n - 1;
75+
int cur_ans = -1;
76+
77+
int old = cost[i];
78+
st.update(i, 0);
79+
80+
while (left <= right)
81+
{
82+
int mid = std::midpoint(left, right);
83+
84+
if (st.get(0, mid) <= have)
85+
cur_ans = mid, left = mid + 1;
86+
else
87+
right = mid - 1;
88+
}
89+
90+
ans = std::max(ans, cur_ans + 2 - (cur_ans >= i));
91+
st.update(i, old);
92+
}
93+
94+
std::cout << ans << '\n';
95+
}
96+
97+
int main()
98+
{
99+
std::ios::sync_with_stdio(false);
100+
std::cin.tie(nullptr);
101+
102+
int t = 1;
103+
std::cin >> t;
104+
105+
while (t--)
106+
solve();
107+
108+
return 0;
109+
}

0 commit comments

Comments
 (0)