Блог пользователя atcoder_official

Автор atcoder_official, история, 2 года назад, По-английски

We will hold Japan Registry Services (JPRS) Programming Contest 2024 (AtCoder Beginner Contest 339).

We are looking forward to your participation!

  • Проголосовать: нравится
  • -47
  • Проголосовать: не нравится

»
2 года назад, скрыть # |
Rev. 2  
Проголосовать: нравится +2 Проголосовать: не нравится

Seems E,F is so difficult

»
2 года назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Hello everyone! Is everyone ready to contest? I wish luck to everyone! :)

»
2 года назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

If anyone solved problem E, please share your idea after the contest.

  • »
    »
    2 года назад, скрыть # ^ |
    Rev. 2  
    Проголосовать: нравится +1 Проголосовать: не нравится

    I traversed the array and for every Ai , finded the maximum among Ai-d , Ai+d and added 1 to it in the dp array of size 5e5.

    eg. 4 2
    3 5 1 2

    dp array = [0,0,0,0,0,0]
    started with 3 , maximum in dp array among [3-2 , 3+2] = [1,5] is 0 add 1 to it and put it at dp[3] = 1;

    dp array = [0,0,1,0,0,0]
    for 5 , maximum in dp array among [5-2,5+2] = [3,7] is 1 add 1 to it and put it at dp[5] = 2;

    dp array = [0,0,1,0,2,0]
    for 1 , maximum in dp array among [1-2,1+2] = [1,3] is 1 add 1 to it and put it at dp[1] = 2;

    dp array = [2,0,1,0,2,0]
    for 2, maximum in dp array among [2-2,2+2] = [1,4] is 2 add 1 to it and put it at dp[2] = 3;

    dp array = [2,3,1,0,2,0]
    Maximum among this is 3, Hence 3 is the maximum subsequence

  • »
    »
    2 года назад, скрыть # ^ |
    Rev. 2  
    Проголосовать: нравится 0 Проголосовать: не нравится
    Spoiler
  • »
    »
    2 года назад, скрыть # ^ |
     
    Проголосовать: нравится +5 Проголосовать: не нравится

    We can optimize a dp solution: dp[i] = longest subsequence ending at ith index satisfying conditions

    the transition would be to consider all j < i such that abs(a[j] — a[i]) <= d but we notice that we only need to consider the last j such that a[j] <= a[i] and abs(a[j] — a[i]) <= d and the last j such that a[j] >= a[i] and abs(a[j] — a[i]) <= d

    i used a segment tree to manage these indices

  • »
    »
    2 года назад, скрыть # ^ |
    Rev. 3  
    Проголосовать: нравится +4 Проголосовать: не нравится

    I will try to explain my approach. As the elements are less than 5e5, you can maintain a dp over the element values (not indexes). For a given element x and max adjacent difference d, the element just before x (i.e. the previous element of the subsequence, if any) can be between x-d to x+d. I used a segment tree over the dp array, where the query returns the max value in the range mentioned. Then for the current element x, the max length of subsequence ending at that point will the be max value in range (x-d,x+d) + 1. Iterate over all elements in array and take the maximum as answer. Here's my code for reference: link

  • »
    »
    2 года назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    you may solve it with tree

»
2 года назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится

Bad one

»
2 года назад, скрыть # |
 
Проголосовать: нравится -9 Проголосовать: не нравится

I realized in the end that B is the recursion.

»
2 года назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

I'm writing it. Task E is interesting and easy

»
2 года назад, скрыть # |
 
Проголосовать: нравится +93 Проголосовать: не нравится

Trash Round.

»
2 года назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

How to solve E?

  • »
    »
    2 года назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    Define $$$dp_{a_i}$$$ is the maximum subsequence ends at $$$a_i$$$. Its contributor values are the $$$dp$$$ values that ends in element from range $$$dp_{[a_i - d, a_i + d]}$$$ so we want to find the maximum $$$dp$$$ value within that range and add it by $$$1$$$ (by appending $$$a_i$$$ at the end of it). To get the maximum values of these $$$dp$$$, we can use segment tree

  • »
    »
    2 года назад, скрыть # ^ |
     
    Проголосовать: нравится +2 Проголосовать: не нравится

    Hints for E: Smooth Subsequence

    Start with the first DP definition that comes to mind.

    $$$dp[i]$$$ is the the maximum length of a smooth subequence ending at $$$i$$$.

    Our desired smooth subsequence has to end at some index. Hence, the answer would be $$$max(dp[i]$$$).

    How to perform transitions? Notice that the candidates for the second last element are $$$j \lt i$$$ such that $$$|a[i] - a[j] \leq d$$$. Hence, you can naively take contribution from all such $$$j$$$.

    Submission

    Now, If you're a beginner, most of the problems you might've solved so far would have applied DP on indices. However, it's possible to apply DP on values as well. Let's define an alternate DP definition.

    At any point of time, $$$dp[val]$$$ is the maximum length of a smooth subequence whose last element has value $$$val$$$.

    Suppose we insert elements one by one. What happens when you see the $$$i^{th}$$$ element for the first time. When an element enters, the subequences can be divided into 2 disjoint sets, one that ends at $$$i$$$ and the other that doesn't include $$$i$$$. By induction, we can assume that the for the subsequences not ending at $$$i$$$, their DP values would've been populated correctly. Now, how does $$$dp[a[i]$$$ vary? The possible candidates for the second last element are all $$$dp[old]$$$ such that $$$|old - a[i]| \leq d$$$. Hence, you can naively take contribution from them.

    Submision

    For the next part, if you are not familiar with Segment Tree, but understood the alternate DP definition on values, you can consider this problem as solved and come back to it later once you learn segment trees. There's no additional thinking required for the later parts, just blind use of template/library.

    Next, notice that you are taking contribution from a continuous range. More specifically, you are looking for a data structure that can support point update and range maxima. Hence, you can use segment tree to optimize it.

    Submission

    But if the template scares you, you can also use Atcoder Library's Segment Tree.

    Submission

»
2 года назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Did anyone AC problem G in $$$O(n \log{n} + q \log^2{n})$$$?

»
2 года назад, скрыть # |
 
Проголосовать: нравится +56 Проголосовать: не нравится

I think you can just copy G from somewhere else since the problem is so generic lol.

»
2 года назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

How to solve D?

»
2 года назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

When solving problem D using BFS (Breadth First Search), how can we ensure we don't traverse back? When we only have one dwarf, we usually use a 'visited' array to indicate whether we have traversed or not. But what about two dwarfs moving in the same direction? What should we do then?

»
2 года назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Can anyone share the idea behind problem F? I couldn't understand the approach mentioned in the video linked in the editorials tab.

  • »
    »
    2 года назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    If $$$a \cdot b = c$$$, then $$$a \pmod{m} \cdot b \pmod{m} = c \pmod{m}$$$. You can select some prime numbers as $$$m$$$, and check if they are same under those modulo. The more prime number you choose, the chance of collision will decrease.

  • »
    »
    2 года назад, скрыть # ^ |
    Rev. 3  
    Проголосовать: нравится 0 Проголосовать: не нравится

    Multiplication is expensive in that problem. They made it less expensive by picking a random mod and did the same bruteforce algorithm but with smaller numbers.

    I personally can't imagine the probability of collision but I assume when you have very big numbers, it's hard, when multiplied under same mod that their product will collide with some smaller number that you had in your array, given that you only have 1000 numbers in the array. You could probably force it to collide but not under a random modulus.

»
2 года назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

I did D using multiple ways method, but I think I'm not right, can anyone share his/her smart idea

»
2 года назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Either you use FFT/Karatsuba in F or just AC with Python.

»
2 года назад, скрыть # |
 
Проголосовать: нравится +7 Проголосовать: не нравится

E easier than D

»
2 года назад, скрыть # |
 
Проголосовать: нравится +11 Проголосовать: не нравится
»
2 года назад, скрыть # |
 
Проголосовать: нравится +28 Проголосовать: не нравится

Please stop making big integer problems like $$$F$$$ python people just make fun of cpp people :( like this

»
2 года назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

The Easiest G Ever

Just a model of persistent segment tree

»
2 года назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

This game requires almost no brain power. Just a constant stream of code. I think E and G are both original or extremely similar questions that have appeared elsewhere.

»
2 года назад, скрыть # |
 
Проголосовать: нравится -26 Проголосовать: не нравится

trash contest. We don't need to think but we can AC all problem.

»
2 года назад, скрыть # |
Rev. 2  
Проголосовать: нравится 0 Проголосовать: не нравится

there is actually a deterministic approach to solve F using python

Spoiler

my solution

»
2 года назад, скрыть # |
 
Проголосовать: нравится -11 Проголосовать: не нравится

I think the data of problem F is a little simple, such as the following code: https://atcoder.jp/contests/abc339/submissions/49968092

Input: 3 998244353 998242355 0

Correct output: 5

But that code outputs 14.

»
2 года назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

What is the difficulity score of Problem D E F based on codeforces rating system?

»
2 года назад, скрыть # |
 
Проголосовать: нравится +3 Проголосовать: не нравится

I think it's a trash round. Problem F and G are too easy.

»
2 года назад, скрыть # |
 
Проголосовать: нравится +8 Проголосовать: не нравится

It's just the Goodbye 2023 on Atcoder. Imbalanced difficulty, existing problem, letting wrong solutions pass...

»
2 года назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

This is the reason I didn't AK this contest.

»
2 года назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

I'm just wondering, what solution can be used to solve G if the queries can be answered offline?

  • »
    »
    2 года назад, скрыть # ^ |
     
    Проголосовать: нравится +5 Проголосовать: не нравится

    I didn't solve it online, but I thought of a offline solution with a segment tree. You can sort the queries in descending order for the x values, and as you go through each query, insert the array values that are greater than the current x into the segment tree, then query the range of the segment tree to get the sum of elements in the range [l, r] that exceed the current x. Then you just take the sum of this subarray and subtract the sum of elements greater.

  • »
    »
    2 года назад, скрыть # ^ |
     
    Проголосовать: нравится +5 Проголосовать: не нравится

    persistent segment tree/wavelet matrix/merge sort tree can solve it online, but when talking about offline query, you can just use a simple point add range sum query segment tree with sweepline to solve it

  • »
    »
    2 года назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    I've created a tutorial and practice contest to help you understand how to solve it efficiently if the queries could be answered offline.

»
2 года назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Can Problem E solved with dp + Fenwick Tree?

»
2 года назад, скрыть # |
 
Проголосовать: нравится -17 Проголосовать: не нравится

Bad one

»
2 года назад, скрыть # |
 
Проголосовать: нравится +2 Проголосовать: не нравится

TemplateCoder.

»
2 года назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Why there is still no editorial yet?

»
2 года назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

https://atcoder.jp/contests/abc339/submissions/50118454

Any counter test for this solution of D