We will hold AtCoder Beginner Contest 184.
- Contest URL: https://atcoder.jp/contests/abc184
- Start Time: http://www.timeanddate.com/worldclock/fixedtime.html?iso=20201122T2100&p1=248
- Duration: 100 minutes
- Number of Tasks: 6
- Writer: beet, evima, kyopro_friends, tatyam, sheyasutaka
- Rated range: ~ 1999
The point values will be 100-200-300-400-500-600.
We are looking forward to your participation!
Solving D is the main target!!!!
good luck
Hope I can get at least 4 problems!
you will~
Good luck!
I hope I can solve E.(I'm too vegetable.)
In problem C, the third move in example 3 from (-247,253) to the destination point does not satisfy any of the three conditions! Does the problem setter have any explanation?
-247-253=998244353-998244853
Wow, I overlooked the difference between the two large numbers. Thanks for the explanation.
C is not good for Problem C in ABC and I don't like it :(
But other problems are great and interesting.
sorry
I think the definition of everything is quite clear. Which part do you think is confusing?
What is '.' doing in D?
Where do you see that in problem D?
Sorry, I meant 'E'
It is just a character.
Problem C isn't a ABC style
maybe new style :)
how to sove expected value questions
Errichto's video
It is the sum of possible outcomes each multiplicated by the propability of that outcome.
Why the answer to the last example in problem D is 91.83..?
I'm wondering for it too...
Time limit for problem E(in Java) is a bit too strict.I have applied the fastest IO method with silly optimizations still it misses out on 4 cases.
Or your solution's time complexity is too high XD
F
F
Aren't E and F classical problems?
E looks like BFS problem
how to solve f any hints ?
Try meet in the middle
I'd like to second that. E and F are way too standard problems if you have appreciable experience.
Well, that is abc contest. The maintainers do not write editorials because the problems are so standard that its not worth it. You could also argue that A is to simple.
Nobody said the problems in the abc contest were particularly original, why complain about it?
I'm sorry if i was not clear before. I meant way too standard for ABC's standard.
F is googlable.
How to get rid of TLE in E(in Java)??
I have used fastest IO still it fails
My submisssion:-https://atcoder.jp/contests/abc184/submissions/18340875
You also need to mark which alphabets you have visited else complexity will be O(n ^ 4). Consider a matrix consisting of all
a
.Don't apply BFS again on visited characters. For example you have encountered 'a' once, then don't again visit cells containing 'a'.
You need to optimize your code, not IO.
AC Code in Java
Looks like I finally need to learn expected value
How do you solve D ?
We can create a dp[a][b][c]==prob that that state happens. Then add up the propabilities.
I think we need to add "probability multiplied by number of steps to reach a,b,c". Whenever you are helping someone , elaborate completely or don't do at all. Many a times it just confuses people more.
Fuck you, idiot.
Sure . I am not bad-mouth as you are. But then how am i wrong ? You have written "propabilities" , what the heck is "propabilities" ? Also if "Then add up the propabilities" was true then wouldn't be answer of every input be 1. Question is asking expectation and not sum of probabilities .
People who have downvoted , please downvote , but again these are people who confuse beginners more in name of helping . I was once beginner and i understand that.
spookywooky you keep complaining about contest problems and editorials whereas you yourself cannot explain properly .
I love spookywooky's explanations , they're not deliberately explicit enough to become spoonfeeding which is great if you still don't want to miss out on the satisfaction you get after solving the problem yourself and this doesn't mean someone doesn't know how to get the point across. Again it's a personal opinion. Also I don't know many users here who document there thoughts in their contest submissions like spookywooky does which helps a lot sometimes.
That was again nice beginner contest. C was a bit clumsy to implement.
how to solve C?
The answer is [0,3]
if same pts then answer is 0
if same diagonal or belong to same square(third way of movement), answer is 1
if abs(r2 — r1) + abs(c2-c1) <= 6 (two moves of third type), or imagine this to be chess coloring and both blocks are of same color, or after one diagonal move reaching same row if the distance now is <= 3,then the answer is 2
else answer is 3
proof/intuition for 3rd point?
Chess coloring.. each block with same color is reachable by 2 diagonal moves (i suggest you to draw out the same)
I see. thanks!
You missed out on that you can reach a point in two moves if abs(a-c)+abs(b-d)<=6 as you can perform the third operation twice.
I did some research on this problem. I will try to explain what I understood. Here is my code. Ok.
step 0: When source and detination are same
step 1: It will require 1 step to reach destination when it satisfies the 3 given condiitons.
step 2: when
-AA(it will take 1 step because it seems like it lies on the same diagonal)
-AB(it is the case when 2 diagonals meet. so
(a+b)%2==(c+d)%2
. Correct me if its wrong)-AC(when 1st and 3rd conditions satisfy. Then check for
(abs((a+b)-(c+d))<=3)
)-BB(it will take 1 step because it seems like it lies on the same diagonal)
-BC(when 1st and 3rd conditions satisfy. Then check for
(abs((a-b)-(c-d))<=3)
)-CC(when 3rd condition satisfy 2 times so instead of checking for 3 check for 6
(abs(a-c)+abs(b-d))<=6
)step 3: other than 0,1,2 it is said to be 3
When 1st and 3rd conditions satisfy why should we check for abs((a+b)-(c+d))<=3 wouldn't it be always zero. Could you please explain
yeah.. what It mean is it require 1 step to travel along the diagonal and 3rd condition is for checking if it lies with in squares. so A+C.
Could you please tell the intuition behind checking the condition abs((a+b)-(c+d))<=3 if 1st and 3rd conditions satisfy. Thanks in advance.
ok what i understood that I will exlpain. Its all my imagination. See in this 3rd condition abs(a-c)+abs(b-d)<=3. I felt like abs(a-c) is for rows and abs(b-d) is for columns. see c+d is the diagonal for destination point. so if the difference between these 2 diagonals are less than or equal to 3 then it means it lies within the squares of the destination only right!!. Even the logic is same for BC also. Hope you understood.
Yeah, thanks for your time.
Lol C was more hard than E to me.
For F, how to know backtracking + meet in the middle has good enough time complexity?
We can create the table of size 2^20 for first 20 items. Then do the same for the other 20 items, and combine each entry of the first table with the optimal one from the other in O(logn). ie binary search for the value.
Thats exactly what I did but still got WA on 8 cases. Can you help me debug?
Not sure. However, I think v1 and v2 should contain the value 0, too.
I think maybe you should use upper_bound?
sum+=a[j];
should besum+=v[j];
The constraint on N is small, i.e, 40. So if we divide it in 20 and 20 and then compute subset sums for the right half and left half using recursion, it will have a time complexity of 2^20, which is doable.
How to solve C and D?
C: Observe that all fields are reachable with 3 moves. This is, because all fields (chess coloring) with same color are reachable with two moves.
So, check if dist==0. Then check if dist==1 by implementing the rules as given in statement.
Then check if dist==2, that is same field color or manhattan dist<=6. Or if destination point+3 fields is on one of the diagonals.
Else dist==3
I was still wondering at the end of the contest why it is not reachable in two moves, yeah it is because of chess coloring :/
How chess coloring is happening in the board ? There can be adjacent cells with same color ? Please explain what you really mean .And what is "dist" here ? You should define "dist" first.
chess coloring is that cells sharing a border have different colors, like you know it from chess board.
dist is short for distance, the result we are searching for. sorry for that ;)
You are more confusing now .
How does that answer my question : How chess coloring is happening in the board ?
But according to your explanation its number of moves.
Just dont start to cry, I would feel bad about it.
Nice idea in problem C. Can you explain me, why you use abs(a-c)+abs(b-d)<=6
Well, its two steps. In one step we can go manhattan distance 3, so in two steps manhattan distance 6.
How to solve D??
Dynamic Programming
My submission should be self-explanatory
Submission
I thought about the reverse process, let's build state a, b, c from all possible final states. That way I can add 1 directly while computing expectation from successive states, probabilities of transition remain the same, but the expected value of answer is now expected value of states a, b, c. Transitions are namely (a+1,b,c), (a, b+1,c) and (a, b, c+1) multiplied with respected probabilities ,of course if its a valid state. Submission Link
I think there is a mistake in problem E... I wrote a simple BFS that should never visit a node more than once (and never try to visit a node more than 5 times due to teleport — using the fact that the closest 'a' character to the start should be the one that uses all of the potential 'a' teleports); so my algorithm should be O(m) where m is the number of edges in the graph, but it does not work because of TLE.
I wrote my code in C++
Here is my submission if anyone can take a look: https://atcoder.jp/contests/abc184/submissions/18338763
That heavy usage of sets instead of vector/array seems to make it like 5 to 10 times slower.
Yeah I agree, but it shouldn't have to make a big difference since my complexity and approach were correct.
this is what happens when people complain about easy tasks in Beginner Contests.
D was the most toughest for me...could anyone share approach?
Got AC on my DP Solution -> ? Want me to share my code?
https://sapphireengine.com/@/2ptnop :) My DP solution
I had some difficulties to understand this, too.
Then I had to use long double instead of double to get rid of rounding errors. Is that intentional, or is my implementation stupid?
https://atcoder.jp/contests/abc184/submissions/18330299
Double is sufficient. You got AC because you fixed issue in line 67, 68 and 79.
Accepted Code
My C solution passed all test cases except one. Anyone has any ideas on what it would be?
I think ABCs aren't good anymore :(
I think you ain't working hard anymore :(
Ok I solved up to E. I didn't solve F because I don't know meet in the middle. This contest was just about knowing or don't knowing algorithm. If you know you will solve, If you don't know so you can't solve. A and B were as always. C wasn't good at all as others say. D was just about knowing expected value. E wasn't anything more than one BFS. F was meet in the middle.
For all of those if you know the technique you can solve else you can't. Is this contest good?
For problem E: using teleporters as edges got me TLE submission but when I added a simple check if the current teleporter letter was used before it passed submission. Can someone explain why is this happening, because I thought since the distance should be less it will not add it to the queue anyway. Is it just the loop that's causing me a TLE?
No, the idea of keeping a visited array is a must to avoid tle, because lets say you are traversing the point with 'a' then if this is the first 'a' you have encountered then all other 'a' will be marked with their best distance (thats how bfs works) and hence when you next encounter a 'a', you dont need to again update the weights of other 'a' because they are already marked to their best.
Can someone explain solution for C.
Can anyone please tell me why a simple BFS in E is giving me TLE in 3 cases. I am unable to think of any edge cases in my implementation.
My Solution.
imagine a grid with full of 'a', this code would have the complexity of n^2 * m ^ 2 then
Thanks, got AC now. I had implemented that initially but commented it later.. :facepalm:
My first submission also got time limit exceeded so I applied this logic , look once visiting a particular character 'a' in minimum number of moves say 'd' then mark all the unvisited positions that has character 'a' as minimum distance = d+1. Now notice that this character 'a'(assumed here) is no longer use so u can erase it from your adjacency list. Mine such approach passed all test cases. Hope it helps and provide u the sufficient idea. My Solution Link
Can someone explain D like I am an idiot please. Thanks.
https://sapphireengine.com/@/2ptnop You can refer this to understand
Let $$$p[i][j][k]$$$ be the probability that we currently have $$$i$$$ gold coins, $$$j$$$ silver coins, and $$$k$$$ bronze coins. Initially, $$$p[a][b][c] = 1$$$ and otherwise $$$p[i][j][k] = 0$$$. We update
For every such $p[i][j][k]$ where exactly one of $$$i, j, k$$$ is equal to 100, we simply update our answer by
where $$$(i+j+k)-(a+b+c)$$$ represents the number of turns needed to reach state $$$(i, j, k)$$$.
I think your solution is wrong,
I think the probability at i,j,k would be $$$p[i][j][k]= \frac{i-1}{i+j+k-1} * p[i-1][j][k] + \frac{j-1}{i+j+k-1} * p[i][j-1][k] + \frac{k-1}{i+j+k-1} * p[i][j][k-1]$$$
Am I missing something???
You're right, I meant to write $$$+=$$$ instead of an $$$=$$$ for each equation. As we go through the dp the updates will accumulate into the equation you wrote.
Does this definition work for second example in the given for the question? I don't think it does, I raised the concern regarding this during contest but they said everything is correct... that's I was trying to think some other solution during the contest.
Edit: It works, I was making to some horrible mistakes while calculation
I don't see why not.
https://atcoder.jp/contests/abc184/submissions/18354165
Thanks for your code, I found the issue with my way of writing the equation
Thank you so much, I tried a similar thing but failed so I was really confused. Thanks for the clear explanation
where are the solutions?
[Problem E] This is the first time I successfully hardcoded a solution on AtCoder during the contest. I thought the test cases on AtCoder are invincible too.
I guessed random_32.txt to consist of all dots except the start and goal and hardcoded for that accordingly.
Before hardcode - https://atcoder.jp/contests/abc184/submissions/18340539 (I still do not know why this TLE)
After hardcode - https://atcoder.jp/contests/abc184/submissions/18341941 (This should break and TLE if I add a hex anywhere)
Readable version of the code - https://atcoder.jp/contests/abc184/submissions/18346808
Can anyone please tell their approach for problem F. Using knapsack approach gives TLE
Try to think about meet in middle, calculate all possible sum of weights of 2 equal parts of the input array and think of obtaining answer as combination of each value from first set with best value from the other. Ofcourse best answer might just come from one part only, so take care of that separately. Time Complexity will be O(2^(N/2)) with 2 pointers or with a factor of N if you're lazy enough :p
Just curious would this approach be intuitive if we don't know about meet in the middle algorithm xD Thanks for your approach by the way.
Well its intuitive now isn't it? :p
Yes thanks buddy
Yeah. But two pointer will work only if I generate the sum in sorted order. Can you tell how to generate subset sum in $$$sorted$$$ order.
Edit: — Also how factor of N will not come? I have to go through the n/2 bits position right? so complexity will be $$$O(N2^{N/2})$$$. If I am wrong please point it out.
Oops missed the sorting part, yeah its N * 2^(N/2).I meant factor of N over 2^(N/2) making it resulting complexity.
C was tougher than F for me
My video editorial. Uploading took a long time.
https://atcoder.jp/contests/abc184/submissions/18351753 please someone suggest me a way to get over TLE will be great help! problem E! c++ code
// tele[c].clear();
The above line is correct, uncomment it, and place it after the loop. Each portal letter need to be traversed only once.
Otherwise consider N=2000 grid and all cells marked with 'a', it will result in O(n^4) runtime.
My first submission also got time limit exceeded so I applied this logic , look once visiting a particular character 'a' in minimum number of moves say 'd' then mark all the unvisited positions that has character 'a' as minimum distance = d+1. Now notice that this character 'a'(assumed here) is no longer use so u can erase it from your adjacency list. Mine such approach passed all test cases. Hope it helps and provide u the sufficient idea.My Solution Link
why we don't get editorial after the contest what if some one not able to solve the problem where should we discuss.
Here
Pre-req for solving E and F ??
E- I used dijkstra F — Meet in Middle
[Problem C] It seems that they added a test case of something like this, that made my wrong code fail after the contest
in problem C I am getting 3 WA. I tried but I am unable to find the mistake. The test cases are also not uploaded yet. I am getting WA at random_09.txt,random_10.txt,random_11.txt. Can anyone help me with this
Help! I got WA for the Task E and only because one wrong answer of the case "random_23.txt". I have no idea now Submission #18364982
the_Miracle if (i != tmp) { dist[i.first][i.second] = dist[tmp.first][tmp.second] + 1; vis[i.first][i.second] = 1; Q.push(i); }
The above lines are creating errors. Use !vis[tmp.first][tmp.second] to update.
Can someone tell me why my code, gives a TLE for the problem E.
LINK : https://atcoder.jp/contests/abc184/submissions/18365487
I changed some part of your code , added some visited arrays.
The ac code
For Problem C: Please give me a condition where need three moves. I can't understand why I can't go to any destination in two moves.
In the sample input, there is one that require 3 moves
If you want a simpler example
F is way too standard and even available on GeekesforGeeks. I understand that ABC are for Educational purpose but I don't think it's a good idea to give problems in ABC that are just a click away from googling.
Is space required in structure binding in C++17? I noted the different behavior on AtCoder between
for(auto [x, y]:vii)
andfor(auto [x,y]: vii)
. It's so weird. See 2 submissions: 18566943 vs. 18566919.you can use text-compare to compare them, only 1 space difference between these 2 submissions.