Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΊΠΎΡ€Π·ΠΈΠ½ΡƒΠŸΠΎΠ·Π²ΠΎΠ½ΠΈΡ‚ΡŒ
Найти Π² Π”Π·Π΅Π½Π΅
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста

πŸπŸŽ“ 5 Π·Π°Π΄Π°Ρ‡ для ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΠΊ собСсСдованию ΠΏΠΎ Python

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠœΠ°Π½Π°ΠΊΠ΅Ρ€Π° ΠΈ Π·Π°ΠΌΠ΅Ρ‚Π°ΡŽΡ‰Π΅ΠΉ прямой, опрСдСляСм Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΎΠΊΠ½Π° с k-элСмСнтами, вычисляСм ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ участков Ρ€Π°Π·Π½ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π° ΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π½Π°ΠΈΠ±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰ΡƒΡŽΡΡ ΠΏΠΎΠ΄ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π“Π»Π°Π·ΡƒΡ€ΡŒ ΠšΠΎΠ½Π΄ΠΈΡ‚Π΅Ρ€ ΡƒΠΊΡ€Π°ΡˆΠ°Π΅Ρ‚ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ Ρ‚ΠΎΡ€Ρ‚, покрывая ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ Ρ€Π°Π·Π½ΠΎΡ†Π²Π΅Ρ‚Π½ΠΎΠΉ Π³Π»Π°Π·ΡƒΡ€ΡŒΡŽ. Для приготовлСния Π³Π»Π°Π·ΡƒΡ€ΠΈ ΠΎΠ½ ΡΠΌΠ΅ΡˆΠΈΠ²Π°Π΅Ρ‚ ΡΠ°Ρ…Π°Ρ€Π½ΡƒΡŽ ΠΏΡƒΠ΄Ρ€Ρƒ с Π»ΠΈΠΌΠΎΠ½Π½Ρ‹ΠΌ ΠΈ Ρ‡Π΅Ρ€Π½ΠΈΡ‡Π½Ρ‹ΠΌ соком Π² Ρ€Π°Π·Π½Ρ‹Ρ… пропорциях, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Ρ€ΠΈ ΠΎΡ‚Ρ‚Π΅Π½ΠΊΠ° синСго Ρ†Π²Π΅Ρ‚Π°: свСтлый, срСдний ΠΈ насыщСнный. Π­Ρ‚ΠΈ Ρ†Π²Π΅Ρ‚Π° ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ΡΡ числами: 0 для свСтлого, 1 для срСднСго ΠΈ 2 для насыщСнного синСго. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ красивый ΡƒΠ·ΠΎΡ€, ΠΎΠ½ раздСляСт ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΡ€Ρ‚Π° Π½Π° Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ полосы ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ A1, A2, ..., An сантимСтров ΠΈ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ полосы высоты B1, B2, ..., Bn сантимСтров. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ полосы дСлят ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΡ€Ρ‚Π° Π½Π° n Γ— n ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ². ΠŸΠ΅Ρ€Π΅ΡΠ΅Ρ‡Π΅Π½ΠΈΠ΅ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ полосы i ΠΈ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ полосы j ΠΈΠΌΠ΅Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Π½ΠΎΠΌΠ΅Ρ€ (i + j) mod 3 для всСх 1 ≀ i, j ≀ n: ΠŸΠΎΠΌΠΎΠ³ΠΈΡ‚Π΅ ΠΊΠΎΠ½Π΄ΠΈΡ‚Π΅Ρ€Ρƒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… Ρ†Π²Π΅Ρ‚ΠΎΠ² Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ…
ОглавлСниС

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠœΠ°Π½Π°ΠΊΠ΅Ρ€Π° ΠΈ Π·Π°ΠΌΠ΅Ρ‚Π°ΡŽΡ‰Π΅ΠΉ прямой, опрСдСляСм Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΎΠΊΠ½Π° с k-элСмСнтами, вычисляСм ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ участков Ρ€Π°Π·Π½ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π° ΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π½Π°ΠΈΠ±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰ΡƒΡŽΡΡ ΠΏΠΎΠ΄ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

Π“Π»Π°Π·ΡƒΡ€ΡŒ

ΠšΠΎΠ½Π΄ΠΈΡ‚Π΅Ρ€ ΡƒΠΊΡ€Π°ΡˆΠ°Π΅Ρ‚ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ Ρ‚ΠΎΡ€Ρ‚, покрывая ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ Ρ€Π°Π·Π½ΠΎΡ†Π²Π΅Ρ‚Π½ΠΎΠΉ Π³Π»Π°Π·ΡƒΡ€ΡŒΡŽ. Для приготовлСния Π³Π»Π°Π·ΡƒΡ€ΠΈ ΠΎΠ½ ΡΠΌΠ΅ΡˆΠΈΠ²Π°Π΅Ρ‚ ΡΠ°Ρ…Π°Ρ€Π½ΡƒΡŽ ΠΏΡƒΠ΄Ρ€Ρƒ с Π»ΠΈΠΌΠΎΠ½Π½Ρ‹ΠΌ ΠΈ Ρ‡Π΅Ρ€Π½ΠΈΡ‡Π½Ρ‹ΠΌ соком Π² Ρ€Π°Π·Π½Ρ‹Ρ… пропорциях, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Ρ€ΠΈ ΠΎΡ‚Ρ‚Π΅Π½ΠΊΠ° синСго Ρ†Π²Π΅Ρ‚Π°: свСтлый, срСдний ΠΈ насыщСнный. Π­Ρ‚ΠΈ Ρ†Π²Π΅Ρ‚Π° ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ΡΡ числами: 0 для свСтлого, 1 для срСднСго ΠΈ 2 для насыщСнного синСго.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ красивый ΡƒΠ·ΠΎΡ€, ΠΎΠ½ раздСляСт ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΡ€Ρ‚Π° Π½Π° Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ полосы ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ A1, A2, ..., An сантимСтров ΠΈ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ полосы высоты B1, B2, ..., Bn сантимСтров. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ полосы дСлят ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΡ€Ρ‚Π° Π½Π° n Γ— n ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ². ΠŸΠ΅Ρ€Π΅ΡΠ΅Ρ‡Π΅Π½ΠΈΠ΅ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ полосы i ΠΈ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ полосы j ΠΈΠΌΠ΅Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Π½ΠΎΠΌΠ΅Ρ€ (i + j) mod 3 для всСх 1 ≀ i, j ≀ n:

   3 ≀ n ≀ 100 000; 1 ≀ A1,... , An ΠΈ B1,... , Bn ≀ 10 000
3 ≀ n ≀ 100 000; 1 ≀ A1,... , An ΠΈ B1,... , Bn ≀ 10 000

ΠŸΠΎΠΌΠΎΠ³ΠΈΡ‚Π΅ ΠΊΠΎΠ½Π΄ΠΈΡ‚Π΅Ρ€Ρƒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… Ρ†Π²Π΅Ρ‚ΠΎΠ² Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… сантимСтрах. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ Ρ†Π΅Π»ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число n, ΠΈ Π΄Π²Π΅ строки, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… пСрСчисляСтся ΡˆΠΈΡ€ΠΈΠ½Π° ΠΈ высота полос.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Π²ΠΎΠ΄Π°

Π’Ρ‹Π²ΠΎΠ΄

РСшСниС

Наша Ρ†Π΅Π»ΡŒ – Π½Π°ΠΉΡ‚ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π·Π° врСмя O(n) ΠΈΠ»ΠΈ O(n log n) Π² Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС. ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π² Π³ΠΎΠ»ΠΎΠ²Ρƒ – ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ всС ячСйки сСтки n x n ΠΈ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ. Однако это Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΉΠΌΠ΅Ρ‚ слишком ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ количСство ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ растСт ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Ρƒ n.

Π‘ΠΎΠ»Π΅Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄

Если ΠΌΡ‹ помСняСм столбцы ΠΈΠ»ΠΈ строки мСстами, Ρ‚ΠΎ общая ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π° останСтся ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΉ. НапримСр, Ссли ΠΌΡ‹ пСрСмСстим столбСц Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, Ρ‚ΠΎ Ρ‚Π΅ΠΌΠ½ΠΎ-синиС ячСйки просто пСрСмСстятся вмСстС со столбцом, Π½Π΅ измСняя ΠΈΡ… ΠΎΠ±Ρ‰Π΅ΠΉ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ.

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, достаточно Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ случай n = 3. Π’ΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ просто ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π°, суммируя ячСйки с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ остатком ΠΎΡ‚ дСлСния суммы индСксов строки i ΠΈ столбца j Π½Π° 3. НапримСр:

  • A3k (свСтло-синий): сумма ΠΏΠ»ΠΎΡ‰Π°Π΄Π΅ΠΉ ячССк, Π³Π΄Π΅ (i + j) Π΄Π°Π΅Ρ‚ остаток 0 ΠΏΡ€ΠΈ Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π½Π° 3
  • A3k+1 (срСдний синий): сумма ΠΏΠ»ΠΎΡ‰Π°Π΄Π΅ΠΉ ячССк, Π³Π΄Π΅ (i + j) Π΄Π°Π΅Ρ‚ остаток 1 ΠΏΡ€ΠΈ Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π½Π° 3
  • A3k+2 (насыщСнный синий): сумма ΠΏΠ»ΠΎΡ‰Π°Π΄Π΅ΠΉ ячССк, Π³Π΄Π΅ (i + j) Π΄Π°Π΅Ρ‚ остаток 2 ΠΏΡ€ΠΈ Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π½Π° 3

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π°, просмотрСв Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сСтку 3 x 3. ЕдинствСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ – Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ†Π²Π΅Ρ‚Π° ΠΏΡ€ΠΈ суммировании ΠΏΠ»ΠΎΡ‰Π°Π΄Π΅ΠΉ:

***

Π£Ρ‡ΠΈΡ‚Π΅ΡΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Python Π² ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΌ Ρ‚Π΅ΠΌΠΏΠ΅!

Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Ρƒ Π² IT ΠΈΠ»ΠΈ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ свои Π½Π°Π²Ρ‹ΠΊΠΈ программирования? Наш курс идСально ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊΠ°ΠΊ для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ², Ρ‚Π°ΠΊ ΠΈ для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ²!

πŸ’‘ Π§Ρ‚ΠΎ вас ΠΆΠ΄Π΅Ρ‚ Π½Π° курсС

  • 32 ΡƒΡ€ΠΎΠΊΠ° практичСских занятий.
  • 4 ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° для Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ€Ρ‚Ρ„ΠΎΠ»ΠΈΠΎ: Π±ΠΎΡ‚ для Telegram, парсинг Π²Π΅Π±-страниц, Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ бСзопасных ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ, ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ для ΠΈΠΏΠΎΡ‚Π΅ΠΊΠΈ.
  • 90 часов ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΈ 15 часов Ρ‚Π΅ΠΎΡ€ΠΈΠΈ.
  • Π Π°Π±ΠΎΡ‚Π° Π² PyCharm ΠΈ Jupyter Notebook.
  • ΠžΠ±Ρ€Π°Ρ‚Π½Π°Ρ связь ΠΎΡ‚ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ… ΠΏΡ€Π΅ΠΏΠΎΠ΄Π°Π²Π°Ρ‚Π΅Π»Π΅ΠΉ.

πŸ‘¨β€πŸ« ΠŸΡ€Π΅ΠΏΠΎΠ΄Π°Π²Π°Ρ‚Π΅Π»ΠΈ

  • Π ΠΎΠΌΠ°Π½ Π‘ΡƒΠ»Π³Π°ΠΊΠΎΠ² β€” экспСрт с 5-Π»Π΅Ρ‚Π½ΠΈΠΌ стаТСм, Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ школьников ΠΈ студСнтов ΠΊ ΠΎΠ»ΠΈΠΌΠΏΠΈΠ°Π΄Π°ΠΌ ΠΏΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅.
  • Артур Π‘Π°ΠΏΡ€Ρ‹ΠΊΠΈΠ½ β€” Ex-Data Scientist ПАО Β«ΠœΠ΅Π³Π°Ρ„ΠΎΠ½Β», Ρ€Π°Π±ΠΎΡ‚Π°Π» с ΠΊΡ€ΡƒΠΏΠ½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΏΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ СстСствСнного языка ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ Π°ΡƒΠ΄ΠΈΠΎ.

πŸ“… Начало курса Π² любоС врСмя! Π£Ρ‡ΠΈΡ‚Π΅ΡΡŒ Π² ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΌ для вас Ρ‚Π΅ΠΌΠΏΠ΅ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ CoreApp.

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ, Ρ…ΠΎΡ‡Ρƒ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ

(function () { let link = document .getElementById ("3b79014a-039b-49bd-b6bd-3c89cd4b4bcb-https://proglib.io/w/fc76a435-26"); if (! link) return; let href = link .getAttribute ("href"); if (! href) return; let prefix = link .dataset .prefix; let action = link .dataset .action; link .addEventListener ("click", function (e) { let data = new FormData (); data .append ("url", href); apiFetch (action, { method: "POST", body: data }) .then (function (res) {}) .catch (function (err) { console .error (err); }); }) })();

***

Π’ΠΈΠ΄ Π½Π° ΠΌΠΎΡ€Π΅

ΠŸΡ€ΠΈ застройкС Π½Π°Π±Π΅Ρ€Π΅ΠΆΠ½ΠΎΠΉ ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ компания располоТила здания Π² Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ порядкС. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄ΠΎΠΌΠ° Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Π²ΠΈΠ΄Π° Π½Π° ΠΌΠΎΡ€Π΅:

-2

Власти Π³ΠΎΡ€ΠΎΠ΄Π° Ρ€Π΅ΡˆΠΈΠ»ΠΈ снСсти всС здания, ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Π²ΠΈΠ΄ Π½Π° ΠΌΠΎΡ€Π΅. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ список, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ пСрСчисляСтся количСство этаТСй ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ здания, ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список Π·Π΄Π°Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ останутся послС сноса.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Π²ΠΎΠ΄Π°

Π’Ρ‹Π²ΠΎΠ΄

РСшСниС

Π—Π°Π΄Π°Ρ‡Π° сводится ΠΊ поиску наибольшСй ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉΡΡ ΠΏΠΎΠ΄ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ этого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° составляСт O(n log m), Π³Π΄Π΅ n – Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ массива x, Π° m – Ρ€Π°Π·ΠΌΠ΅Ρ€ самой Π΄Π»ΠΈΠ½Π½ΠΎΠΉ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°ΡŽΡ‰Π΅ΠΉ ΠΏΠΎΠ΄ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΈΠ΄Π΅ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ:

  • Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ индСкса i ΠΌΡ‹ добавляСм элСмСнт x_i ΠΊ самой Π΄Π»ΠΈΠ½Π½ΠΎΠΉ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°ΡŽΡ‰Π΅ΠΉ ΠΏΠΎΠ΄ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, которая строится Π½Π° основС прСфикса x_1, ..., x_{i-1}.
  • Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ мноТСство всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΏΠΎΠ΄ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ прСфикса x_1, ..., x_{i-1}. Π”Π²Π΅ Π²Π°ΠΆΠ½Ρ‹Ρ… характСристики ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠΎΠ΄ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ y – это Π΅Π΅ Π΄Π»ΠΈΠ½Π° ΠΈ послСдний элСмСнт.
  • ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅Π΄ΠΎΠΌΠΈΠ½ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΠΎΠ΄ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ мСньшС ΠΏΠΎ Π΄Π»ΠΈΠ½Π΅ ΠΈ Π½Π΅ большС ΠΏΠΎ послСднСму элСмСнту, Ρ‡Π΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΠ΄ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Π΄Π»ΠΈΠ½Ρ‹. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°ΠΌ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ хранСния ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.
  • Для эффСктивного хранСния Π½Π΅Π΄ΠΎΠΌΠΈΠ½ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΠΎΠ΄ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ массив b, Π³Π΄Π΅ b[k] – послСдний элСмСнт самой Π΄Π»ΠΈΠ½Π½ΠΎΠΉ ΠΏΠΎΠ΄ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π΄Π»ΠΈΠ½Ρ‹ k. Π­Ρ‚ΠΎΡ‚ массив Π±ΡƒΠ΄Π΅Ρ‚ строго Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°ΡŽΡ‰ΠΈΠΌ.
  • Когда ΠΌΡ‹ рассматриваСм ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ элСмСнт x_i, Ρ‚ΠΎ ΠΈΡ‰Π΅ΠΌ, Π² ΠΊΠ°ΠΊΡƒΡŽ ΠΈΠ· Π½Π΅Π΄ΠΎΠΌΠΈΠ½ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΠΎΠ΄ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ x_i, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ, Π±ΠΎΠ»Π΅Π΅ Π΄Π»ΠΈΠ½Π½ΡƒΡŽ ΠΏΠΎΠ΄ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π·Π° O(log m) с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска.
  • Для хранСния самих ΠΏΠΎΠ΄ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ связанныС списки, прСдставлСнныС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π²ΡƒΡ… массивов: h (Ρ…Ρ€Π°Π½ΠΈΡ‚ индСксы элСмСнтов Π² x) ΠΈ p (Ρ…Ρ€Π°Π½ΠΈΡ‚ индСксы ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… элСмСнтов Π² спискС).

🐍 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° питониста

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° питониста»

πŸπŸŽ“ Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° собСса ΠΏΠΎ Python

ΠŸΠΎΠ΄Ρ‚ΡΠ½ΡƒΡ‚ΡŒ свои знания ΠΏΠΎ Python Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° собСса ΠΏΠΎ PythonΒ»

🐍🧩 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ Python

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎ Python для ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ PythonΒ»

Π¦ΡƒΠΊΠ°Ρ‚Ρ‹

Вася ΠΎΡ‡Π΅Π½ΡŒ Π»ΡŽΠ±ΠΈΡ‚ Ρ†ΡƒΠΊΠ°Ρ‚Ρ‹, Π½ΠΎ Ρ‚Π΅Ρ€ΠΏΠ΅Ρ‚ΡŒ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΈΡ€ΠΎΠ³ΠΈ. Однако Ρ†ΡƒΠΊΠ°Ρ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ вмСстС с куском ΠΏΠΈΡ€ΠΎΠ³Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½ΠΈ ΡƒΠΊΡ€Π°ΡˆΠ°ΡŽΡ‚. Какой наимСньший кусок ΠΏΠΈΡ€ΠΎΠ³Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚Ρ€Π΅Π·Π°Ρ‚ΡŒ Вася, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· всСх Π²ΠΈΠ΄ΠΎΠ² Ρ†ΡƒΠΊΠ°Ρ‚ΠΎΠ²?

-3

Π¦ΡƒΠΊΠ°Ρ‚Ρ‹ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ΡΡ Π±ΡƒΠΊΠ²Π°ΠΌΠΈ английского Π°Π»Ρ„Π°Π²ΠΈΡ‚Π°. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° сначала ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ строку с Π±ΡƒΠΊΠ²Π°ΠΌΠΈ, Π° Π·Π°Ρ‚Π΅ΠΌ Ρ†Π΅Π»ΠΎΠ΅ число – Π½ΡƒΠΆΠ½ΠΎΠ΅ количСство разновидностСй Ρ†ΡƒΠΊΠ°Ρ‚ΠΎΠ².

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Π²ΠΎΠ΄Π°

Π’Ρ‹Π²ΠΎΠ΄

РСшСниС

Π­Ρ‚ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ популярной Π½Π° собСсСдованиях Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎ подсчСту элСмСнтов Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΠΊΠ½Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° k. Π’ нашСм случаС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ куска, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ экзСмпляр ΠΈΠ· Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ количСства Π²ΠΈΠ΄ΠΎΠ² Ρ†ΡƒΠΊΠ°Ρ‚ΠΎΠ². РСшСниС ΠΈΠΌΠ΅Π΅Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ O(n), Π³Π΄Π΅ n – Π΄Π»ΠΈΠ½Π° Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ строки, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎ строкС ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅Π΅ ΠΎΠΊΠ½ΠΎ:

Π‘ΠΏΡƒΡ‚Π½ΠΈΠΊΠΎΠ²Ρ‹Π΅ Π°Π½Ρ‚Π΅Π½Π½Ρ‹

БСсконСчная бСрСговая линия опрСдСляСтся ΠΊΠ°ΠΊ ось x. ΠœΠΎΡ€Π΅ находится Π²Ρ‹ΡˆΠ΅ оси x, Π° ΡΡƒΡˆΠ° – Π½ΠΈΠΆΠ΅. Π’ ΠΌΠΎΡ€Π΅ располоТСны нСбольшиС острова, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ x ΠΈ y. Π—Π΅Π»Π΅Π½Ρ‹Π΅ спутниковыС Π°Π½Ρ‚Π΅Π½Π½Ρ‹, располоТСнныС Π½Π° Π±Π΅Ρ€Π΅Π³Ρƒ, ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ Π΄ΠΈΡΡ‚Π°Π½Ρ†ΠΈΡŽ d. НСобходимо Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π΄ΠΈΡΡ‚Π°Π½Ρ†ΠΈΡŽ d ΠΈ число островов n, Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ – n Π½Π°Π±ΠΎΡ€ΠΎΠ² ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ островов, ΠΈ опрСдСляСт минимальноС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ количСство Π°Π½Ρ‚Π΅Π½Π½ для покрытия всСх островов:

-4

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Π²ΠΎΠ΄Π°

Π’Ρ‹Π²ΠΎΠ΄

РСшСниС

Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π»Π΅ΠΆΠΈΡ‚ Π² основС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π·Π°ΠΌΠ΅Ρ‚Π°ΡŽΡ‰Π΅ΠΉ прямой. Основная идСя состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ линию ΠΎΡ‚ Π»Π΅Π²ΠΎΠ³ΠΎ края Π΄ΠΎ ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ ΠΏΠΎ плоскости, обрабатывая события, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ происходят ΠΏΡ€ΠΈ пСрСсСчСнии этой Π»ΠΈΠ½ΠΈΠΈ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π½Π° плоскости. Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ составляСт O(n log n):

Π‘Π°ΠΌΡ‹ΠΉ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ ΠΏΠ°Π»ΠΈΠ½Π΄Ρ€ΠΎΠΌ

ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ строку, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠ°Π»ΠΈΠ½Π΄Ρ€ΠΎΠΌΠΎΠ², ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΡƒΡŽ самый Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ…. Если Π² строкС содСрТатся нСсколько ΠΏΠ°Π»ΠΈΠ½Π΄Ρ€ΠΎΠΌΠΎΠ² ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ – вывСсти любой ΠΈΠ· Π½ΠΈΡ…. ΠŸΡ€ΠΎΠ±Π΅Π»ΠΎΠ² ΠΈ Π·Π½Π°ΠΊΠΎΠ² прСпинания Π² строкС Π½Π΅Ρ‚.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Π²ΠΎΠ΄Π°

Π’Ρ‹Π²ΠΎΠ΄

РСшСниС

Π­Ρ‚Ρƒ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π·Π° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈΡ‡Π½ΠΎΠ΅ врСмя с Π½Π°ΠΈΠ²Π½Ρ‹ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ ΠΈ Π·Π° O(n log n) с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ массивов суффиксов. Π‘ΠΎΠ»Π΅Π΅ эффСктивный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠœΠ°Π½Π°ΠΊΠ΅Ρ€Π°, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Π² 1975 Π³ΠΎΠ΄Ρƒ.

ΠšΠ»ΡŽΡ‡Π΅Π²Π°Ρ идСя Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° – ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΈΠΌΠΌΠ΅Ρ‚Ρ€ΠΈΡŽ ΠΏΠ°Π»ΠΈΠ½Π΄Ρ€ΠΎΠΌΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ эффСктивно Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ Π΄Π»ΠΈΠ½Ρ‹ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Π»ΠΈΠ½Π΄Ρ€ΠΎΠΌΠΎΠ², Ρ†Π΅Π½Ρ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ символС Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ строки.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠ°Π»ΠΈΠ½Π΄Ρ€ΠΎΠΌ, Ρ†Π΅Π½Ρ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π½Π° c, радиуса d – c, Π³Π΄Π΅ d – ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚Π°ΠΊΠΎΠΉ индСкс. ΠŸΡƒΡΡ‚ΡŒ j – Π·Π΅Ρ€ΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ i ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ c.

Из симмСтрии слСдуСт, Ρ‡Ρ‚ΠΎ ΠΏΠ°Π»ΠΈΠ½Π΄Ρ€ΠΎΠΌ, Ρ†Π΅Π½Ρ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π½Π° j, радиуса p[j], Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π²Π΅Π½ слову, Ρ†Π΅Π½Ρ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ Π½Π° i, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π΄ΠΎ радиуса d – i. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, p[j] являСтся Π½ΠΈΠΆΠ½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Π΅ΠΉ для значСния p[i].

Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°Ρ‡Π°Ρ‚ΡŒ вычислСниС p[i] с p[j] ΠΈ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ Π²ΠΏΡ€Π°Π²ΠΎ, сравнивая символы, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚. Π­Ρ‚ΠΎ позволяСт Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ p[i] Π·Π° Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ врСмя, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΡƒΡŽ ΠΏΡ€ΠΈ вычислСнии ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ p:

-5

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ этапы Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ:

  • ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅ΠΌ Π²Ρ…ΠΎΠ΄Π½ΡƒΡŽ строку s, вставляя Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ # Π²ΠΎΠΊΡ€ΡƒΠ³ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ символа ΠΈ добавляя ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»ΠΈ ^ ΠΈ $ ΠΏΠΎ краям строки. НапримСр, abc прСобразуСтся Π² ^#a#b#c#$. ΠŸΡƒΡΡ‚ΡŒ получСнная строка называСтся t.
  • Π­Ρ‚ΠΎ позволяСт ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠ°Π»ΠΈΠ½Π΄Ρ€ΠΎΠΌΡ‹ ΠΊΠ°ΠΊ Ρ‡Π΅Ρ‚Π½ΠΎΠΉ, Ρ‚Π°ΠΊ ΠΈ Π½Π΅Ρ‡Π΅Ρ‚Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹.
  • Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ этом ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠ°Π»ΠΈΠ½Π΄Ρ€ΠΎΠΌ начинаСтся ΠΈ заканчиваСтся с раздСлитСля #. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π΄Π²Π° ΠΊΠΎΠ½Ρ†Π° ΠΏΠ°Π»ΠΈΠ½Π΄Ρ€ΠΎΠΌΠ° ΠΈΠΌΠ΅ΡŽΡ‚ индСксы с ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ‡Π΅Ρ‚Π½ΠΎΡΡ‚ΡŒΡŽ, Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для строки t Π² Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для исходной строки s.
  • ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»ΠΈ ^ ΠΈ $ ΠΈΠ·Π±Π°Π²Π»ΡΡŽΡ‚ ΠΎΡ‚ нСобходимости Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π³Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹Π΅ случаи.

***

Π”Ρ€ΡƒΠ³ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ

РСшаСм 5 ΠΎΠ»ΠΈΠΌΠΏΠΈΠ°Π΄Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ Π½Π° Python: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π±ΠΈΡ‚ΠΎΠ²ΡƒΡŽ маску для Π²Ρ‹Π±ΠΎΡ€Π° симпатичных ΡƒΠ·ΠΎΡ€ΠΎΠ², Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ ΠΈΠ³Ρ€Ρ‹, подсчитываСм Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π²Ρ‹Ρ€ΡƒΠ±ΠΊΠΈ Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π², ΠΈ выясняСм, Π·Π° сколько сСкунд ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎ эскалатору.

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΊ собСсСдованию ΠΏΠΎ Python: составляСм Π°Π½ΠΎΠ½ΠΈΠΌΠΊΡƒ, провСряСм Π³ΠΈΠΏΠΎΡ‚Π΅Π·Ρƒ ΠšΠΎΠ»Π»Π°Ρ‚Ρ†Π°, Ρ€Π΅ΡˆΠ°Π΅ΠΌ судоку, Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ кэш для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ ISBN ΠΈ вычисляСм ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Ρ‹ занятости.

РСшаСм 5 интСрСсных Π·Π°Π΄Π°Ρ‡: провСряСм Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Π΄Π΅Ρ€Π΅Π²ΡŒΡ Π½Π° ΡΠΈΠΌΠΌΠ΅Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ, вычисляСм расстояниС Π”Π°ΠΌΠ΅Ρ€Π°Ρƒ-Π›Π΅Π²Π΅Π½ΡˆΡ‚Π΅ΠΉΠ½Π° ΠΈ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅ΠΌ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ².