Thanks for participating!
Idea: SlavicG
Tutorial
Tutorial is loading...
Solution
#include "bits/stdc++.h"
using namespace std;
int main() {
int t; cin >> t;
while(t--) {
int x; cin >> x;
if(x < 1400) cout << "Division 4\n";
else if(x < 1600) cout << "Division 3\n";
else if(x < 1900) cout << "Division 2\n";
else cout << "Division 1\n";
}
}
Idea: Errichto
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> cnt(n + 1, 0);
int ans = -1;
for(int i = 0; i < n; i++) {
int x; cin >> x;
if(++cnt[x] >= 3) {
ans = x;
}
}
cout << ans << endl;
}
}
Idea: mesanu
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);
int even1 = 0, even2 = 0, odd1 = 0, odd2 = 0;
for(int i = 0; i < n; ++i) {
cin >> a[i];
if(i % 2 == 0) {
if(a[i] % 2 == 1) odd1 = 1;
else even1 = 1;
} else {
if(a[i] % 2 == 1) odd2 = 1;
else even2 = 1;
}
}
if(even1 && odd1) {
cout << "NO\n";
} else if(even2 && odd2) {
cout << "NO\n";
} else {
cout << "YES\n";
}
}
}
Idea: flamestorm
Tutorial
Tutorial is loading...
Solution
for i in range(int(input())):
n = int(input())
l = input().split('W')
bad = False
for s in l:
b1 = 'R' in s
b2 = 'B' in s
if (b1 ^ b2):
bad = True
print("NO" if bad else "YES")
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<vector<int>> cnt(12, vector<int>(12, 0));
long long ans = 0;
for(int i = 0;i < n; ++i) {
string s; cin >> s;
for(int j = 0;j < 2; ++j) {
for(char c = 'a'; c <= 'k'; ++c) {
if(c == s[j]) continue;
string a = s; a[j] = c;
ans += cnt[a[0] - 'a'][a[1] - 'a'];
}
}
++cnt[s[0] - 'a'][s[1] - 'a'];
}
cout << ans << "\n";
}
}
Idea: MikeMirzayanov
Tutorial
Tutorial is loading...
Solution
t = int(input())
for test in range(t):
n = int(input())
a = list(map(int, input().split()))
l = 0
r = n - 1
suml = a[0]
sumr = a[n-1]
ans = 0
while l < r:
if suml == sumr:
ans = max(ans, l + 1 + n - r)
if suml <= sumr:
l+=1
suml+=a[l]
elif sumr < suml:
r-=1
sumr+=a[r]
print(ans)
Idea: MikeMirzayanov
Tutorial
Tutorial is loading...
Solution
#include <bits/stdc++.h>
using namespace std;
const int MAX = 200007;
const int MOD = 1000000007;
void solve() {
int n, m;
cin >> n >> m;
char g[n + 7][m + 7];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> g[i][j];
}
}
for (int j = 0; j < m; j++) {
int last = n - 1;
for (int i = n - 1; i >= 0; i--) {
if (g[i][j] == 'o') {last = i - 1;}
else if (g[i][j] == '*') {swap(g[i][j], g[last][j]); last--;}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << g[i][j];
}
cout << '\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;
int main() {
int t; cin >> t;
while(t--) {
int n, k; cin >> n >> k;
vector<int> cnt(31, 0), a(n);
for(int i = 0;i < n; ++i) {
cin >> a[i];
for(int j = 30; j >= 0; --j) {
if(a[i] & (1 << j)) ++cnt[j];
}
}
int ans = 0;
for(int i = 30; i >= 0; --i) {
int need = n - cnt[i];
if(need <= k) {
k -= need;
ans += (1 << i);
}
}
cout << ans << "\n";
}
}
flamestorm orz
flamestorm orz
flamestorm orz
flamestorm orz
orz
flamestorm orz
ORZ
orz
orz
ORZ
flamestorm orz
orz
Thanks for the round, I loved it!
props on hosting a div 4 round
I was too slow to finish H
same
Thanks for the awesome round and light fast editorial!
My first full solved round! Let's goooo!
same to me
same for me
Looking forward to more div.4 rounds, so I can have flawless solves like this <3.
same hahahaha
hahah,,same
Also, there are video solutions here for people who prefer those.
that's really helpful, thank you!
I was too slow. Feels so bad knowing I could've done tons better if only I was faster. :( I'll try harder next time. Thanks for the contest guys!
This may come off as an unpopular opinion but I feel the round should have at least consisted of 1 ~ 2 1600 rated greedy or ad-hoc style problems.
Lately, most CF div 2 rounds had very annoying C or B problems and it would have been nice to have a problem of those nature in this round. (Today's D was the closest to what I am trying to say)
The div 3 rounds's most difficult problems are at least of 1900 rating (non inflated) even though it is meant to be for < 1600 rated people.
I think it is as fair to have at least 1 ~ 2 1600 problems in div 4 rounds too following the div 3 standards.
Just some suggestions from my end.
Hi, can someone point out why i am getting wrong answer here for Question F. If i am running that test case on my system then i am getting the correct output but here it shows a different output. Can someone point it out why. Thanks in advance.
Code : https://codeforces.com/contest/1669/submission/154423744
I think you miss the case where the amount of candies the two eat overlapped
No NO, actually for this test case
6 1127 5715 4917 682 1721 4439
Judge is telling my output is 6, but on my system its coming 5 which is the correct answer
You do not initialize variable
temp
, so its value is unpredictable:Check this out 154423790
使用双指针试试 use double poiters, and move both while left and right have same amount,move only left when left has less,otherwise move the right
import java.util.*; import java.io.*; public class Main { public static void main(String args[]) throws IOException{ BufferedReader bf=new BufferedReader(new InputStreamReader(System.in)); PrintWriter pw=new PrintWriter(System.out); Scanner sc=new Scanner(System.in); int n=sc.nextInt(); for(int i=0;i<n;i++){ int k=sc.nextInt(); int arr[]=new int[k]; for(int j=0;j<k;j++){ arr[j]=sc.nextInt(); } int ans=0; int l=0,r=k-1; int a=arr[0],b=arr[k-1]; while(l<r){; if(a==b){ ans=l+1+k-r; l++; if(l<k){ a+=arr[l]; } r--; if(r>=0){ b+=arr[r]; } } else if(a<b){ l++; if(l<k){ a+=arr[l]; } } else{ r--; if(r>=0){ b+=arr[r]; } } } System.out.println(ans); } } }
I waste all the time debugging the split string in D. Look like I should learn some python :D
i am getting TLE in test case 3 for problem E. 2-Letter Strings . Can anyone explain why is that? Thank you
154427318
The solution needs to be of O(n) time and your algorithm works in O(n^2) time.
Problems F and G were (in my opinion) the coolest ones in the round. Not surprised to realise that was Mike who proposed them.
Meaning you would have been surprised if it were to be proposed by Errichto / SlavicG /Mesanu /Flamestorm ?
in problem H why we not initialize ans=A[1]&A[2]&...A[N-1]&A[N] because why not that also contribute to final answer?? please reply
If some bit from A[1]&...&A[N] contributes to the answer, it means that every number has it, so in that case, n−count_i will be 0. In that case, that bit is catched by the answer anyways (since always k >= 0)
thanks!!
You can do that after setting all the bits that will get you the maximum & in all the numbers and this solution did that [submission:https://codeforces.com/contest/1669/submission/154391862]
Starting questions were easy but last ones were little bit optimising...
Very good contest for beginners. It would be better if the H problem has a Python solution. The same solution like in tutorial gets TLE.
Unfortunately, it's pretty rare to see a contest with vanilla cpython fully supported all the way up through its hardest problems.
The main way around this has been for platforms to add pypy support (for which 64-bit has been a vast improvement), combined with substituting in faster input functions... and it's pretty workable (not without quirks/caveats though).
For reference: 154321651 154359653
Thanks. It is a striking difference of input() between PyPy 3 64-bit and Python 3.8. I get 297 ms on PyPy 3 64 instead of 2000 ms on Python 3.8 with absolutely the same solution. PyPy performs input() faster almost 7 times.
154457903
154457994
TLE with Python 3.8.3 154483619 Accepted with PyPy 3.7.10 (7.3.5 64-bit) 154483785
For some reason, my code for D didn't work even though the algo is the exact same lol Edit: small bug cost me badly :( but I had to leave the contest early
In problem E, why does multiset get TLE and map get AC 154413991 154415571.
Reason
Thanks. P/s: I have upvote your comment.
第一次参加codeforces,打卡 first time to participate contest on codeforces
Problem G is 1861. Rotating the Box.
This one is even simpler though. There's no rotation involved.
orz
Orz, what iş means?
Meaning
orz looks like a man is on his knees.it means i admire him very much
Hi! This was my first contest. I solved three problems but did not get any rating points. Can someone explain why so?
You should wait, then give your points
How long should we wait and is there a way to solve the problems after the contest? This was my first contest so I had some issues with the submission xD
Solutions were leaked. MikeMirzayanov
Problem D — https://ide.geeksforgeeks.org/cRVhmz9gbI
Problem E — https://ide.geeksforgeeks.org/V5RoKGRyPs
Problem F — https://ide.geeksforgeeks.org/r0DMzbirqS
Problem G — https://ide.geeksforgeeks.org/deNrTlJG0p
Problem H — https://ide.geeksforgeeks.org/804K8WBJ9C
Me with 1300 others after solving all problems! .... Le-m-gendary Greend_mister. (><)
orz
https://www.youtube.com/watch?v=8SHACLzAUEI
https://codeforces.com/contest/1669/submission/154468622 why is it giving tle and https://codeforces.com/contest/1669/submission/154468664 is not? there is only a difference of break statement. Please clarify
Yes, there is a big difference! In the first code where you got TLE, you have not completed taking inputs! you have T test cases, for each test case you are given a value of N and N elements,
Now in the first code, in the same loop where you are taking input, you are BREAKing that loop just because you have found out your answer! It means if you have found your solution after taking the Y number of Inputs, the remaining N-Y inputs are not taken. So those N-Y inputs will be taken for the next test case, resulting in an Error/WA (Not necessarily TLE)
You have to take input of all the N elements in each test case.
Solution: ALWAYS TAKE INPUTS SEPARATELY and do perform Operations on the input you have taken to avoid this type of mistake.
Thanks a lot! Will always keep that in mind.
I think I might be misunderstanding 1669E - 2-Letter Strings. I thought one could just read the strings and always use the last read string (e.g., s_j) to compare all the j — 1 strings before. I've read the editorial and it makes sense to me. My reasoning tells me that my logic should be the same, so I came up with this code, but it seems to be wrong:
I'd appreciate any help! I'm probably missing something silly here ^^'
You don't have a correct algorithm. You add 0 or 1 to res instead of the quantity of pairs. Please, read tutorial.
Are you sure about that? :o Can you give a counterexample? If I add 1 whenever a pair (i, j) with i < j satisfies the given condition, I don't have to add the whole quantity of pairs at once. In fact, when changing the vector to a plain array instead, it passes the first 4 tests (but times out at some point because it's O(n^2)). If you'd like me to, I can make an example to clarify the idea of the algorithm.
Excuse me, your idea is correct. Every new string can add to result as many pairs as many previous strings have exactly one different letter with new one. It is not a good idea to use v.size(). You make a vector v with n empty elements, don't use these elements and append additional elements for every new string. It would be better to input directly cin >> v[j] and use j rather than v.size() — 1. It will be 4 times faster. Of course, O(n^2) is very slow. Only 121 different strings are possible. You can count the quantity of every possible string and calculate the total quantity of pairs after that.
Agreed! Thanks for the info about vectors, nice to know ^^
Where can I find a video tutorial
After the screencast.
ok thank you very much!
On Youtube ?
I wrote E so complicated that I was dizzy!!! My stupid code
Orz
I could have increase my rating, but I forgot it :)
what is the meaning of ORZ?
You can think of it as a gesture
gesture, what type of?
A man fell to his knees
is it like: 'take a bow'?
I think he's more like kneeling down and support the ground with both hands
Forgive me for my poor English...
Thanks, sorry for my poor knowledge about these terms!
Screencast + video editorial
Amazing tutorial. I upsolved all the problems using this tutorial and also improve my logic in solved problems. Thanks.
why d problem solution is giving error?
anyone please help
for i in range(int(input())):
12 5 BRBBW 1 B 2 WB 2 RW 3 BRB 3 RBB 7 WWWWWWW 9 RBWBWRRBW 10 BRBRBRBRRB 12 BBBRWWRRRWBR 10 BRBRBRBRBW 5 RBWBW Traceback (most recent call last): File "main.py", line 1, in for i in range(int(input())): ValueError: invalid literal for int() with base 10: '12 5 BRBBW 1 B 2 WB 2 RW 3 BRB 3 RBB 7 WWWWWWW 9 RBWBWRRBW 10 BRBRBRBRRB 12 BBBRWWRRRWBR 10 BRBRBRBRBW 5 RBWBW'
** Process exited — Return Code: 1 **
Thanks for awesome round
Hello I think my points are deducted because something related to ideone I got a mail that my solution significantly coincides with other solutions I use Ideone most probably in public mode I didn't know that anyone can copy my code in ideone and I received an email that I broke some rule.
Please if my points are deducted due to this issue I will not use ideone again I will search how to change the public mode in ideone to private.
thank you
how to use c++ to finish question D?
We can use an array to save the positions of every character 'W'. Then, they'll devide the string into several parts. For each part, if it only contains 'B' or 'R', cout<<"NO"; otherwise, cout<<"YES".
For 1669D — Colorful Stamp, if you did it slightly differently than the editorial, try this input
It should output "YES"
MikeMirzayanov solutions are always very intuitive and easy to understand. Despite the difficulty of the problem. Great teacher, thanks every one!
orz
.
o__rz____
good
According to me, using python in editorial is better than any other language( even tho i myself use Java)...its just more understandable.
Can anyone explain problem E(https://codeforces.com/problemset/problem/1669/E) logic(O(nlogn) or O(n)) in some detail by taking an example? I COULDNT UNDERSTAND EDITORIAL
ans += (1 << i); can anyone explain me why are we doing this in problem H ?
EDIT — i got it we are doing pow(2,i) .