Please read the new rule regarding the restriction on the use of AI tools. ×

LAZY solution to problem D in Codeton round 8

Revision en1, by drdilyor, 2024-03-30 21:27:53

Heyo! If you tried to solve problem D you have probably ended up trying to optimize this algorithm:

C++ brute force

But of course this won't work! The number of values in dp[i] will grow exponentially. But we only need to output first K values of the final dp[0]. Can we do better?

We only need to store first K values for each dp[i]. So we can rewrite: dp[i] = cur; while (dp[i].size() > k) dp[i].pop_back();

This leaves us with O(n^2 k) solution, this time the bottleneck is the merging part. The OFFICIAL solution is to use priority queue to select first K values after merging, without going through all values. But we are not interested in that!

LAZY merging

If you have heard about Haskell, you might know that it's a lazy language, it only computes things when it absolutely needs them -- e.g. when you print them. Could it be the case that just switching our programming language to Haskell make the solution pass? (Spoiler: yes, kindof)

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en15 English drdilyor 2024-04-01 08:07:35 5 fix typos
en14 English drdilyor 2024-03-31 17:21:32 151
en13 English drdilyor 2024-03-30 23:00:25 41 Tiny change: ' showing `$` as `$$$`, I don'' -> ' showing `\$` as `\$\$\$`, I don''
en12 English drdilyor 2024-03-30 22:56:18 29
en11 English drdilyor 2024-03-30 22:36:29 86
en10 English drdilyor 2024-03-30 22:35:32 6484
en9 English drdilyor 2024-03-30 22:35:26 6484 Tiny change: '' -> 'Heyo'
en8 English drdilyor 2024-03-30 22:33:20 9 Tiny change: 'putInts $ calc [[' -> 'putInts $ take k $ calc [['
en7 English drdilyor 2024-03-30 22:31:38 4 Tiny change: 'ion:254204032] confiden' -> 'ion:254204408] confiden'
en6 English drdilyor 2024-03-30 22:29:28 87
en5 English drdilyor 2024-03-30 22:24:36 1889 (published)
en4 English drdilyor 2024-03-30 22:18:07 885
en3 English drdilyor 2024-03-30 22:06:54 585
en2 English drdilyor 2024-03-30 21:58:05 6236 Tiny change: '):\n\n```haskell\n let\n ' -> '):\n\n```hs\n let\n '
en1 English drdilyor 2024-03-30 21:27:53 2038 Initial revision (saved to drafts)