We hope you enjoyed the contest!
Idea: flamestorm
Tutorial
Tutorial is loading...
Solution
#include <bits/stdc++.h>
using namespace std;
const string s = "codeforces";
void solve() {
char c;
cin >> c;
for (char i : s) {
if (i == c) {cout << "YES\n"; return;}
}
cout << "NO\n";
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int tt; cin >> tt; for (int i = 1; i <= tt; i++) {solve();}
// solve();
}
Idea: flamestorm
Tutorial
Tutorial is loading...
Solution
#include <bits/stdc++.h>
using namespace std;
const int MAX = 200007;
const int MOD = 1000000007;
void solve() {
int n;
cin >> n;
string s;
cin >> s;
int x = 0, y = 0;
for (int i = 0; i < n; i++) {
if (s[i] == 'L') {x--;}
if (s[i] == 'R') {x++;}
if (s[i] == 'D') {y--;}
if (s[i] == 'U') {y++;}
if (x == 1 && y == 1) {cout << "YES\n"; return;}
}
cout << "NO\n";
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int tt; cin >> tt; for (int i = 1; i <= tt; i++) {solve();}
// solve();
}
Idea: flamestorm
Tutorial
Tutorial is loading...
Solution
#include <bits/stdc++.h>
using namespace std;
const int MAX = 200007;
const int MOD = 1000000007;
void solve() {
int n;
cin >> n;
string s;
cin >> s;
int l = 0, r = n - 1, ans = n;
while (s[l] != s[r] && ans > 0) {l++; r--; ans -= 2;}
cout << ans << '\n';
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int tt; cin >> tt; for (int i = 1; i <= tt; i++) {solve();}
// solve();
}
Idea: SlavicG
Tutorial
Tutorial is loading...
Solution
#include "bits/stdc++.h"
using namespace std;
#define ll long long
#define all(v) v.begin(), v.end()
#define rall(v) v.rbegin(),v.rend()
#define pb push_back
#define sz(a) (int)a.size()
void solve() {
int n; string s; cin >> n >> s;
vector<int> cnt(26, 0), p(26, 0);
for(auto x: s) cnt[x - 'a']++;
int ans = 0;
for(auto x: s) {
--cnt[x - 'a'];
++p[x - 'a'];
int cur = 0;
for(int i = 0; i < 26; ++i) {
cur += min(1, cnt[i]) + min(1, p[i]);
}
ans = max(ans, cur);
}
cout << ans << "\n";
}
int32_t main() {
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int t = 1;
cin >> t;
while(t--) {
solve();
}
}
1791E - Negatives and Positives
Idea: SlavicG
Tutorial
Tutorial is loading...
Solution
#include <bits/stdc++.h>
using namespace std;
int main() {
int t; cin >> t;
while(t--) {
int n; cin >> n;
vector<int> a(n);
long long sum = 0;
int negs = 0;
for(int i = 0; i < n; ++i) {
cin >> a[i];
if(a[i] < 0) {
++negs;
a[i] = -a[i];
}
sum += a[i];
}
sort(a.begin(), a.end());
if(negs & 1) sum -= 2 * a[0];
cout << sum << "\n";
}
}
1791F - Range Update Point Query
Idea: flamestorm
Tutorial
Tutorial is loading...
Solution
#include <bits/stdc++.h>
using namespace std;
int digit_sum(int n) {
int ret = 0;
while(n) {
ret += n % 10;
n /= 10;
}
return ret;
}
void solve() {
int n, q; cin >> n >> q;
vector<int> a(n);
set<int> s;
for(int i = 0; i < n; ++i) {
cin >> a[i];
if(a[i] > 9) s.insert(i);
}
while(q--) {
int type; cin >> type;
if(type == 1) {
int l, r; cin >> l >> r; --l, --r;
int lst = l;
while(!s.empty()) {
auto it = s.lower_bound(lst);
if(it == s.end() || *it > r) break;
a[*it] = digit_sum(a[*it]);
int paiu = *it;
s.erase(it);
if(a[paiu] > 9) s.insert(paiu);
lst = paiu + 1;
}
} else {
int x; cin >> x; --x;
cout << a[x] << "\n";
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(0);
int t; cin >> t;
while(t--) {
solve();
}
}
1791G1 - Teleporters (Easy Version)
Idea: flamestorm
Tutorial
Tutorial is loading...
Solution
#include "bits/stdc++.h"
using namespace std;
#define ll long long
#define all(v) v.begin(), v.end()
#define rall(v) v.rbegin(),v.rend()
#define pb push_back
#define sz(a) (int)a.size()
void solve() {
int n, c, ans = 0; cin >> n >> c;
priority_queue<int> q;
for(int i = 1, x; i <= n; ++i) {
cin >> x;
q.push(-x - i);
}
while(!q.empty()) {
int x = -q.top(); q.pop();
if(x > c) break;
++ans;
c -= x;
}
cout << ans << "\n";
}
int32_t main() {
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int t = 1;
cin >> t;
while(t--) {
solve();
}
}
1791G2 - Teleporters (Hard Version)
Idea: flamestorm
Tutorial
Tutorial is loading...
Solution
#include <bits/stdc++.h>
#define startt ios_base::sync_with_stdio(false);cin.tie(0);
typedef long long ll;
using namespace std;
#define vint vector<int>
#define all(v) v.begin(), v.end()
#define MOD 1000000007
#define MOD2 998244353
#define MX 1000000000
#define MXL 1000000000000000000
#define PI (ld)2*acos(0.0)
#define pb push_back
#define sc second
#define fr first
#define int long long
#define endl '\n'
#define ld long double
#define NO cout << "NO" << endl
#define YES cout << "YES" << endl
int ceildiv(int one, int two) {if (one % two == 0) {return one / two;}else {return one / two + 1;}} int power(int n, int pow, int m) {if (pow == 0) return 1;if (pow % 2 == 0) {ll x = power(n, pow / 2, m);return (x * x) % m;}else return (power(n, pow - 1, m) * n) % m;} int gcd(int a, int b) { if (!b)return a; return gcd(b, a % b);} int factorial(int n, int mod) {if (n > 1)return (n * factorial(n - 1, mod)) % mod; else return 1;} int lcm(int a, int b) {return (a * b) / gcd(a, b);} vector<int> read(int n) {vector<int> a; for (int i = 0; i < n; i++) { int x; cin >> x; a.pb(x);} return a;}struct prefix_sum{vint pref;void build(vint a){pref.pb(0);for(int i = 0; i < a.size(); i++){pref.pb(pref.back()+a[i]);}}int get(int l, int r){return pref[r]-pref[l-1];}};//mesanu
void solve()
{
int n, c;
cin >> n >> c;
vector<pair<int, int>> a;
for(int i = 0; i < n; i++)
{
int x;
cin >> x;
a.pb({x+min(i+1, n-i), x+i+1});
}
sort(all(a));
vector<int> pref;
pref.pb(0);
for(int i = 0; i < n; i++)
{
pref.pb(pref.back()+a[i].fr);
}
int ans = 0;
for(int i = 0; i < n; i++)
{
int new_c = c-a[i].sc;
int l = 0, r = n;
int mx = 0;
while(l <= r)
{
int mid = l+r>>1;
// Calculate price
int price = pref[mid];
int now = mid+1;
if(mid > i)
{
price-=a[i].fr;
now--;
}
if(price <= new_c)
{
mx = max(now, mx);
l = mid+1;
}
else
{
r = mid-1;
}
}
ans = max(ans, mx);
}
cout << ans << endl;
}
int32_t main(){
startt
int t = 1;
cin >> t;
while (t--) {
solve();
}
}
wow tutorial comes out so fast!
wow comment comes out so fast!
wow reply comes out so fast!
!
wow i am not fast
wow i am not so fast than you
wow my net works so fast during the contest
6666
wow you are so fast
话说666是不是只有中国有
Why many people vote "I don't like it"?Is it because I used Chinese?
i'm so slow
可能因为他们看不懂,hhh
笑死了,发个中文被踩了10次(
My contribution drops so fast!
我从+1掉到-1了。。。
问题不大,分不掉就行(
I'm slow
I am average
i am the slowest :D
no i am the slowest :/
和你一样,我在这个贴(https://mirror.codeforces.com/blog/entry/133130)下面的评论被踩了n次(
Now I am slowest
Wow reply to a reply comes out so faist!
wow the series grows so fast
wow my rating drops so fast!
Kudos for the fun round and the near instantaneous posting of the tutorial.
For problem F we can also use a segment tree where the nodes have the max value in the subtree. If the maximum value in any subtree is less than 10 then we shouldn't update that subtree and can skip it. Complexity wise it should be the same as the editorial solution. Implementation 192043154
Bro can you please tell me what is wrong in this implementation of seg tree? Code
Take a look at Ticket 16708 from CF Stress for a counter example.
I think it would be better to solve the F problem by using the union lookup set optimization https://mirror.codeforces.com/contest/1791/submission/214420789
Can u share it again :(((, when i enter it say N/a
Perfect div 4 round IMO. Every problem was solvable by div 4 people, with 1 problem that would push most div 4 people and another problem that would really push most div 4 people but still was solvable
I solved problem F with segment tree (lazy propagation), where I keep track of each update range [l, r] to know the number of times a certain index i [l <= i <= r] also ensuring when the number x <= 9 to break the loop (:)committed 2 WAs initially because of this).
192028574
unfortunately i solved it using lazy propagation segtree too. I had a feeling it's not needed since it's a div 4 round, and the solution without it is nice. Segtrees sure are powerful though
A great problemset.
i can see myself on the first page of official standing xD
Congrats!
I want this kind of flex
Wow, the tutorial came out so fast. Searched for useful data structures online for problem F and found that using binary indexed tree works.
nice,thanks to you i found out lazy propagation is possible with BIT
Very cool that F can be solved with set and DSU. I got stuck on BIT implementation because I don't have a template for it and have only solved a few CSES problems using it. Forgot about the limitation of 3 change operations. Thought G2 would be DP, but the binary search solution is quite elegant. 10/10 problemset overall.
Solved E with DP. Also for the first time I have used segment tree lazy propagation in a live contest (problem F) :)
Can you show me your code for E? i spend an hour to find that a O(n) solution.And i just know if i use dp to solve E i will be TLE.
Nice! I was trying with dp too but couldn't make it AC with dp. 191959517
can u explain ur approach
this line is not clear
Everywhere i go i see "In queue"
For those who solved F with segment tree/fenwick tree, etc., Um_nik's 2nd and 3rd bullet point from this comment is highly relevant 😁
yeah true, but gotta do what you gotta do if it's the only solution you came up with
Can anyone hack my G2? I think it is not correct even I passed the pretest. 192031288
Okay~ I hacked myself and other four Unfortunate guys
can someone help me understand why my code for problem F gives tle? https://mirror.codeforces.com/contest/1791/submission/191999834
The else case of a[x] < 9 allows for repeatedly applying fun(9).
thanks bro got it
enough?
This is my first contest on this platform and it's really great.
For G2, Editorial solves in O(nlogn) after sort but I solve in O(n) + O(logn) after sort.
https://mirror.codeforces.com/contest/1791/submission/192046876
thats the same complexity sir
My screencast with explanations. The problems were very interesting. Thanks for the contest.
It seems that the problem writers like binary indexed tree. Both F and G2 can be solved by binary indexed tree.
There's a sqrt decomposition solution for F, for a range of size sqrt(n) save the number of updates on this rsnge as cnt of that range, and then for the queries which they want you to print the value of an index, add cnt of that index + cnt of the range which it belongs to (let sum of these be $$$K$$$) and find the $$$K$$$'s digit sum for that index's number, here's the code :. 192059676
Can someone explain this part in problem F to me on example: 1 l r — search for the smallest active index at least l (since the list is sorted, we can do it in O(logn)). Afterwards, update that index (replace ai with S(ai)), remove it if it's no longer active, and binary search for the next largest active index in the sorted list, until we pass r.
Is it possible to solve the problem F using Segment tree algorithm concept?? Can anyone help me with this solution using Segment tree...
Solved it using segment trees but got TLE in tc 4
Precompute the sum of digits till there remains one digit. It helps me in fighting with TLE on 4.192204290. I use bit.
i did it but still got TLE
Sure, it can. You need simple tree with 'modification on interval' and 'single element access' operations. Check out this blog for implementation details https://mirror.codeforces.com/blog/entry/18051
For problem E, "if the count of negative numbers is odd, we must have one negative number at the end How can i prove this?
here u can shift negative sign to any elements like if i have -2 3 -1 4 -6 5 then it can be easily changed to 2 -3 -1 4 -6 5 then 2 3 1 4 -6 5 still u have one negative now shift that negative sign to 3 index (1 based)
I understand that negative signs can be shifted anywhere.
What im asking is how do we know that there is no sequence of operations such that no negative numbers remain (in the odd case)?
in one operations either u remove two negative sign or no negative signs see there are three cases when both are negative :- make both positive, 2 neg signs removed when both are postive : no needed , 0 neg signs removed when one is neg and one is positve : still no neg sign removed so every time numbers of neg sign removed is multiple of 2 hence it count is odd one sign always remains
what is the proof of greedy for G1. I thought of it like knapsack but constraints were big so i did greedy but I dont know why greedy is working. shouldn't it fail for the same reason where greedy doesnt work for knapsack ?
Knapsack has a value and weight. If there is only a value your can use greedy.
Thought that each number could only have 3 states for F. This is so sad
Guys, pls, explain F
I used sweep line on F, I haven’t seen anyone talk about it yet. Store the queries and the index they appear and start the sweep line on the array from left to right. Add active elements(index of the query) when it reaches l in an order set and remove them after it reaches r+1. The first 3 values indicate the minimum index to achieve that state. Can be optimized to o(n)
Used the same Alg and got HACKED. Possibly TLE.
You have to process all the queries beforehand
I actually realized what you did here (Checked your solution). At first, it was uneasy to comprehend because of Java, but you did a mixed sweep line with the ordered set.
That was a great one and to check them 0,1,2,3 for later is great.
But if consider a problem with 10 states, it will consume memory. [Though Imma PY coder XD]
...
Was able to hack my solution to about over half the memory and time available with Java. So it does consume a lot of memory but it is possible to reduce the amount of memory and time used by not storing the states the numbers can transition. So about n+4q memory.
Great one at hack and further possibilities. You got this. :))
Thanks :)
Nvm about o(n) still o(nlog(q)+q)
192071106 I'm stuck wondering why this code is not working. Not sure if I misunderstood the problem.
Try this testcase:
Expected output:7
Got my precious 2 solution Hacked due to Arrays.sort(JAVA) so much pain this days :-(
Yeah, that and unordered sets are really annoying hacks.
In problem G2, why is it wrong to take the first portal as portal having minimum overall cost? Can you give a failing test case?-
If I understood your question, it's because that minimum could be taken with an even lower cost.
For example for $$$n=3$$$, $$$a = [17, 8, 2]$$$ and $$$c = 13$$$ we can get use second and third teleporter but not if I go to the third one first.
On problem D I stumbled upon a very weird thing:
When I test my code on my computer, all the test input returns correct answers. However, when I submit this code, I get an error on string "paiumoment". I have no idea how to debug this, because on my machine the answers are all correct. Does anybody know what is the issue?
My g++ version is 12.2.0. I stried both versions 17... and 14.6.4.0 when I submitted the code.
Here's the link to my code: https://mirror.codeforces.com/contest/1791/submission/192076794
P.S. I have a feeling that it does something to do with g++ versions, because on different versions the incorrect answers are different values. But how exactly does it work? I never came across such a problem before
You never initialized cnt which causes undefined behavior because the values of cnt do not start at 0.
Oops, that's an awkward mistake... Thanks a lot!
would not have happened in java
I can't figure out what is wrong with my code for problem 1791D — Distinct Split. Can anyone help me out? #192086640
Try this testcase:
Expected output:7
I solved the F with a segment tree over a difference array
I don't know where is wrong about my D code ?
I need help !!!
Try this testcase:
Expected output:7
I know some people used a seg tree over a difference array, but did anyone else have the same idea but do it with a fenwick tree? https://mirror.codeforces.com/contest/1791/submission/192095662
In G1, what I understand, there is no port in point 0. So, according to the problem, I cannot teleport back to 0 from 0. But if I consider there is no port at point 0, I get WA. To get AC, I had to consider that there could be port at 0. Why? Also the explanation for testcase 1 is given considering the array is 0 indexed. But while explaining testcase 2, we are considering the array is 1 indexed. I am having confusion. Please help me!
Array is 1 indexed every where , maybe you're misreading the sample tests. And also ,there is no port at 0
Can somebody explain why set solution is working in F while map solution giving TLE;
Here is my map Solution giving TLE; https://mirror.codeforces.com/contest/1791/submission/191980859
Problem E solution using DP in O(n). Refer here
Problem F can also be solved by binary indexed tree, which is much easier to implement than segment tree if you didn't come up with the tutorial solution.
Great contest! I love it! Hope I can get specialist this time.
I have a strong data for problem F, but I forget to try it when open hacking,but it can successfully hack one of my friends's code,I left it here but I'm so sorry for that it's a chinese website,but I have tried my best to explain how to use it,you can just download data at the bottom of the website. here: https://www.luogu.com.cn/problem/U279041
I'm so sorry for don't konw how to upload file on codeforces.
can anyone explain why i am getting tle one test case 3 on problem F-
ll testcases=1; cin>>testcases;
Can someone tell me why this code get TLE in F mySubmission
You using SegmentTree, so when you update range [l, r], you update from [l, r]. If we have 1E5 query (1 1 n), your code has time complexity is O(n * 1E5 * log(n)) => TLE. This is my opinion about your code.
I think as i know, in the segment tree the one query takes
log(n)
, and hence the queries over all test cases won't exceed 2e5 so the total complexity will be the number of queries multiplied by the time per query plus the construction of the tree (build function) so we can say: O(2e5 * log(2e5) + 2e5) =O(C * 1e6)
where C is a constant so why TLE?Segment Tree update 1 element in log(n), but you update the range from l to r, so it takes O(log(n) * (r — l + 1)) in 1 query, not log(n)
So you want to say that we can't solve it using segment tree, can we?
In my opinion, I think it can't.
I think you don't totally understand how segtree works.
Segtree is for optimizing "range" operation, and if you see your code again, you will find it only updates in the leaves, which means the segtree doesn't kick in.
Maybe you can change it to record every element's updation count to make segtree functional.
Sorry, my English is not good.
I have a doubt about my submission for F. My code is similar to the one provided in the editorial, the only difference being that I simply moved the iterator to the next element in the set after first setting the iterator to the lower bound of l. But it gives TLE on test case 18. To my knowledge, wouldn't it be better to just move the iterator to the next element in the set as it is already sorted rather than using a binary search to get the next valid index at every iteration? Here's my code -> https://mirror.codeforces.com/contest/1791/submission/192143264
Subject: Need Help for G2 In tutorial it is said we will need to do BS over all the values by taking it as our first problem. While solving I thought that if we took min out of all the starting costs it would be enough. In case of equality between 2 such values I took the one with greater cost from back. It is showing WA at test case 828 expected 2 output 1; what is wrong in my reasoning ?
Take a look at Ticket 16712 from CF Stress for a counter example.
Thanks a lot
Can anyone help in finding the test case in which my algorithm is failing in problem F. Range Update Point Query . submission Link
Great Problem G2
In the problem G2, I am not getting how are they handling the case when the portal we are considering is included both times as the initial portal and in the minimum cost prefix. And in the tutorial's code what this piece of code is doing? int now = mid+1; if(mid > i) { price-=a[i].fr; now--; } can anyone help me out?
Why my code get TLE on test 18 for problem G1? I used qsort to sort the array. https://mirror.codeforces.com/contest/1791/submission/192238361
Can anyone explain why this code is failing this test case?
https://mirror.codeforces.com/contest/1791/submission/192817422
How to write the dp of the E question?
https://mirror.codeforces.com/blog/entry/112282?#comment-1000597
Can Someone help for which case i am getting the Wrong Answer in Problem 1791G2.
Here is my code link https://mirror.codeforces.com/contest/1791/submission/194376164
can somebody help me , I'm getting tle in 1791D here is my source code: https://mirror.codeforces.com/contest/1791/submission/232348177
Time complexity of your code is $$$O(n^2)$$$, which is too slow for $$$n\leq{2\cdot10^5}$$$.
can you help me with F i used multiset to see how many times a index is being worked on (i stored l and r values in different multisets and found the number of elements less than x using lower bound and upper bound) fails on hidden test:(
https://mirror.codeforces.com/contest/1791/submission/282704498
243611436
I cant seem to understand whats wrong with my code. I even looked at the editor, both answers look same but can't seem to find any difference except the while loop which I think shouldn't cause any problem. Can anyone help me debug it. I linked my code above. ///////////////////// solved: I accidently used else if instead of if
can somebody explain problem 1791D : what is logic for cnt and p vector .why are we doing cur += min(1, cnt[i]) + min(1, p[i]); ....is there any other way to do it ?
i have solution for D using "dp", i think it is very interesting way to solve it) 255889366
ca
can someone explain to me why i got tle on test 3 ? 271089554