Raqamlar Akademiyasining sirli xazinalar omborida \(n\) ta turli qiymatli afsungar sonlardan iborat \(a_1, a_2, \dots, a_n\) qatoriy massivi saqlanadi.
Akademiya ustozlari shunday qoida o'rnatishganki, massiv ichidan ikkita turli o'rindagi \(i\) va \(j\) (\(1 \le i < j \le n\)) elementlarini tanlaganda, ularning yig'indisi (\(a_i + a_j\)) juft son bo'lsa, bunday juftlik mukofotga loyiq "Sehrli juftlik" deb e'tirof etiladi
Sizning vazifangiz — ombordagi barcha mumkin bo'lgan elementlar orasidan jami nechta shunday "Sehrli juftlik" hosil qilish mumkinligini topishdan iborat.
Birinchi qatorda yagona butun son \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — massivdagi elementlar soni kiritiladi.
Ikkinchi qatorda \(n\) ta butun son \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — massiv elementlari beriladi.
Yagona qatorda — Akademiya talablariga mos keluvchi barcha "Sehrli juftliklar" sonini chop eting.
| # | Input.txt | Output.txt |
|---|---|---|
| 1 |
5 2 4 6 3 5 |
4 |
| 2 |
4 1 2 3 4 |
2 |
Berilgan \(n\) ta elementdan iborat \(a_1, a_2, \dots, a_n\) massivdan shunday \((i, j)\) indekslar juftligini topish kerakki, bunda \(1 \le i < j \le n\) shart bajarilsin va ularning yig'indisi \((a_i + a_j)\) juft son bo'lsin. Jami shunday "Sehrli juftliklar" sonini topish talab etiladi.
Asosiy g'oya (Matematik yondashuv):
Ikkita sonning yig'indisi \((a_i + a_j)\) qachon juft son bo'ladi? Buni bilish uchun ularning juft yoki toqligini tekshirish kifoya:
Demak, yig'indi juft chiqishi uchun tanlab olingan ikkita sonning ikkalasi ham juft bo'lishi yoki ikkalasi ham toq bo'lishi kerak.
Algoritm:
1. Massivdagi barcha sonlarni qarab chiqamiz va ularning nechtasi juft, nechtasi toq ekanini sanab olamiz:
2. Juft sonlardan juftlik hosil qilish:
Agar massivda \(E\) ta juft son bo'lsa, ulardan ikkitasini tanlash usullari soni kombinatsealar formulasiga ko'ra \(E \times (E - 1) / 2\) ta bo'ladi.
3. Toq sonlardan juftlik hosil qilish:
Agar massivda \(O\) ta toq son bo'lsa, ulardan ikkitasini tanlash usullari soni \(O \times (O - 1) / 2\) ta bo'ladi.
4. Jami "Sehrli juftliklar" soni shu ikki qiymatning yig'indisiga teng:
\(\frac{E \times (E - 1)}{2} + \frac{O \times (O - 1)}{2}\)
Murakkablik:
Vaqt murakkabligi: \(O(n)\) — massivni bir marta to'liq ko'rib chiqib, juft va toq sonlar sanog'i topiladi. Bu \(n \le 2 \times10^5\) cheklovi uchun juda tez ishlaydi va vaqt chegarasiga bemalol ulguradi.
Xotira murakkabligi: \(O(1)\) yoki \(O(n)\) — massivni xotirada saqlash uchun (agar elementlarni birma-bir o'qib ketilsa, qo'shimcha massiv ham talab etilmaydi).
Qadimiy minorada \(n\) ta sehrli kristall topilgan, ularning har birida \(a_i\) miqdorda energiya bor. Afsonaga ko'ra, agar ikkita kristallni birlashtirilsa va ularning energiyalari yig'indisi maxfiy son \(k\) ga qoldiqsiz bo'linsa, o'sha juftlik yashirin portalni ochadi.
Sehrgar sizdan yordam so'rayapti: minoradagi barcha kristall juftliklari orasida nechtasi portal ochish qobiliyatiga ega ekanini aniqlab bering — chunki minora qulab tushishidan oldin faqat bitta imkoniyat qoladi, va sehrgar qaysi juftlikni tanlashni oldindan bilmoqchi.
Birinchi qatorda ikkita butun son \(n\) va \(k\) beriladi (\(1 \le n \le 2 \times 10^5\); \(1 \le k \le 10^9\)) — kristallar soni va portal sirli soni.
Ikkinchi qatorda \(n\) ta butun son \(a_1, \dots, a_n\) beriladi (\(0 \le a_i \le 10^9\)) — har bir kristallning energiyasi.
Portal ochishga qodir bo'lgan \((i, j)\) juftliklar sonini chop eting, bunda \(1 \le i < j \le n\) va \((a_i + a_j) \pmod k = 0\).
| # | Input.txt | Output.txt |
|---|---|---|
| 1 |
4 3 3 1 5 2 |
2 |
| 2 |
5 5 5 10 15 20 25 |
10 |
| 3 |
6 4 1 3 2 2 5 7 |
5 |
1-Test: \(n=4\), \(k=3\), kristallar: \(3, 1, 5, 2\)
Barcha juftliklarni tekshiramiz:
Jami \(2\) ta juftlik portal ochadi: \((1, 5)\) va \((1, 2)\).
2-Test: \(n=5\), \(k=5\), kristallar: \(5, 10, 15, 20, 25\).
Har bir son \(5\) ga qoldiqsiz bo'linadi (qoldig'i \(0\)), shuning uchun istalgan ikkita kristall birlashsa ham yig'indi \(5\) ga bo'linadi. Jami juftliklar soni \(\binom{5}{2} = \frac{5 \times 4}{2} = 10\).
3-Test: \(n=6\), \(k=4\), kristallar: \(1, 3, 2, 2, 5, 7\).
Har bir kristallni \(4\) ga bo'lgandagi qoldig'iga qarab guruhlaymiz:
Qoldig'i \(2\) bo'lgan guruh o'zi ichida (\(2 + 2 = 4\), \(4 \pmod 4 = 0\)) — \(1\) ta juftlik: \((2, 2)\). Qoldiq \(1\) va qoldiq \(3\) guruhlari o'zaro birlashadi (yig'indi \(4\) karrali bo'ladi): \(1 + 3 = 4\), \(1 + 7 = 8\), \(5 + 3 = 8\), \(5 + 7 = 12\) — \(4\) ta juftlik.
Jami: \(1 + 4 = 5\) ta juftlik portal ochadi.
Bizga \(n\) ta kristallar energiyalari berilgan: \(a_1, a_2, \dots, a_n\), va yana maxfiy son \(k\). Shunday \((i, j)\) indekslar juftligini \((1 \le i < j \le n)\) topishimiz kerakki, ularning yig'indisi \(k\) ga qoldiqsiz bo'linsin, ya'ni \((a_i + a_j) \pmod k == 0\). Jami shunday juftliklar sonini chiqarish talab etiladi.
Asosiy g'oya (Matematik yondashuv / Modular Aritmetika):
Ikkita \(a_i\) va \(a_j\) sonlarining yig'indisi \(k\) ga bo'linishi uchun ularning \(k\) ga bo'lgandagi qoldiqlari yig'indisi \(k\) ga bo'linishi kerak. Boshqacha qilib aytganda:
\((a_i + a_j) \pmod k \equiv 0\) \( \iff\) \((a_i \pmod k + a_j \pmod k)\) \(\pmod k \equiv 0\)
Bu shartdan kelib chiqib ikki xil holatni ko'rishimiz mumkin:
Algoritm (Chastota massivi yoki Hash Map yordamida):
Murakkablik:
Vaqt murakkabligi: \(O(n)\) — massivni bir marta to'liq qarab chiqish va qoldiqlarni hisoblash kifoya. \(n \le 2 \cdot 10^5\) cheklovi uchun juda tez ishlaydi.
Xotira murakkabligi: \(O(k)\) yoki \(O(n)\) — qoldiqlar chastotasini saqlash uchun.
Sizga o'lchami \(n \times m\) bo'lgan to'g'ri burchakli labirint berilgan. Labirint \(n\) ta qatordan iborat bo'lib, har bir qator \(m\) ta belgidan tashkil topgan. Har bir katak ikkita holatdan biriga ega:
Qatorlar \(1\) dan \(n\) gacha (yuqoridan pastga), ustunlar esa \(1\) dan \(m\) gacha (chapdan o'ngga) raqamlangan. \((r, c)\) katak \(r-\)qator va \(c-\)ustunda joylashgan katakni bildiradi.
Siz \((1, 1)\) katakdan sayohatni boshlaysiz va \((n, m)\) katakka yetib borishingiz kerak. Bir qadamda joriy katakdan unga chegaradosh (yuqori, quyi, chap yoki o'ng) katakka o'tishingiz mumkin.
Sizda maxsus kuch bor: sayohat davomida jami ko'pi bilan \(k\) ta devor katagini "buzib", oddiy bo'sh katakka aylantirib, undan o'tishingiz mumkin. Devorni buzib o'tish ham bitta oddiy qadam kabi hisoblanadi (ya'ni devor bo'lgan katakka o'tish ham 1 ta qadam sifatida hisoblanadi, lekin bunday o'tishlar soni \(k\) tadan oshmasligi kerak).
\((1, 1)\) va \((n, m)\) katakchalari har doim bo'sh \(\text{«.»}\) bo'lishi kafolatlanadi.
\((1, 1)\) dan \((n, m)\) gacha yetib borish uchun kerak bo'ladigan eng kam qadamlar sonini toping. Agar hech qanday holatda (ko'pi bilan \(k\) ta devor buzib ham) yetib bo'lmasa, \(-1\) chiqaring.
Birinchi qatorda uchta butun son \(n\), \(m\) va \(k\) (\(2 \le n, m \le 300\); \(0 \le k \le \min(n \cdot m,\ 20)\)) — labirintning o'lchamlari va buzish mumkin bo'lgan devorlar sonining chegarasi berilgan.
Keyingi \(n\) ta qatorning har birida \(m\) ta belgidan iborat qator berilgan — labirintning tasviri (\(\text{«.»}\) yoki \(\text{«#»}\)).
Yagona butun sonni — \((1,1)\) dan \((n,m)\) gacha yetib borish uchun kerak bo'ladigan eng kam qadamlar sonini (yoki bu imkonsiz bo'lsa \(-1\)) chiqaring.
| # | Input.txt | Output.txt |
|---|---|---|
| 1 |
3 5 1 ..... ##### ..... |
6 |
| 2 |
5 5 0 ..... ..... ..... ....# ...#. |
-1 |
| 3 |
5 5 1 ..... ..... ..... ....# ...#. |
8 |
1-Test: O'rtadagi qator to'liq devordan iborat, shuning uchun kamida bitta devorni buzish kerak. Masalan, \((1,1) \to (2,1)\) (devor buzib) \(\to (3,1) \to (3,2)\) \(\to (3,3) \to (3,4) \to (3,5)\) — jami \(6\) ta qadam.
2-Test: \(k=0\) bo'lgani uchun devor buzish mumkin emas, \((5,5)\) katakning ikkala qo'shnisi ham devor bo'lgani sabab uni umuman bosib bo'lmaydi.
3-Test: Endi bitta devor buzish mumkin. \((5,5)\) katakka \((4,3)\) yoki \((3,5)\) orqali kirib, faqat bitta devorni buzish kifoya qiladi — javob Manhetten masofasiga (\(4+4=8\)) teng bo'lib qoladi.
Bizga \(n \times m\) o'lchamli labirint berilgan. Boshlang'ich nuqta \((1, 1)\), oxirgi manzil esa \((n, m)\). Labirintda bo'sh kataklar ('.') va devorlar ('#') mavjud. Biz eng ko'pi bilan \(k\) ta devorni "buzib", oddiy bo'sh katakka aylantirgan holda \((1, 1)\) dan \((n, m)\) ga borish uchun ketadigan eng kam qadamlar sonini topishimiz kerak. Agar ilojsiz bo'lsa, \(-1\) chiqaramiz.
Asosiy g'oya (Shortest Path / BFS):
Bu turdagi eng qisqa yo'lni topish masalalarida BFS (Breadth-First Search - Eniga qidirish) algoritmidan foydalanamiz. Biroq, bu oddiy BFS emas, chunki bizda qo'shimcha resurs (\(k\) ta devor buzish imkoniyati) mavjud.
Holatni (state) quyidagicha belgilaymiz: \((r, c, \text{broken})\), bu yerda:
Cheklovlar kichik bo'lgani uchun (\(2 \le n, m \le 300\) va \(0 \le k \le \min(n \cdot m, 20)\)), holatlar soni unchalik katta emas.
Algoritm (0-1 BFS yoki Oddiy BFS + Visited massivi):
1. Navbat (Queue): BFS navbatiga boshlang'ich holatni qo'shamiz: \((1, 1, 0)\) — ya'ni \((1, 1)\) katakdamiz va hali \(0\) ta devor buzganmiz, qadamlar soni \(0\) ga teng.
2. Masofalar/Holatlar massivi (\(dist[r][c][broken]\)): Har bir katak uchun shu paytgacha sarflangan eng kam qadamlarni saqlab boramiz. Boshlang'ich qiymatlar cheksizlik (\(\infty\)) bilan to'ldiriladi.
3. Qadam tashlash:
4. Optimallashtirish: Har safar yangi holatga o'tganda qadamlar soni kamroq bo'lsagina uni navbatga qo'shamiz va dist massivini yangilaymiz.
5. \((n, m)\) katakiga yetib kelganimizdagi eng birinchi topilgan qadamlar soni eng qisqa yo'l bo'ladi (chunki BFS qadamma-qadam kengayib boradi). Agar oxirigacha borib bo'lmasa, \(-1\) chiqaramiz.
Murakkablik:
Vaqt murakkabligi: \(O(n \times m \times k)\) — har bir katak va har bir mumkin bo'lgan buzilgan devorlar soni holati uchun navbatdan bir marta o'tiladi. \(300 \times 300 \times 20 \approx 1.8 \times 10^6\) operatsiyani tashkil qiladi va vaqt chegarasiga bemalol ulguradi.
Xotira murakkabligi: \(O(n \times m \times k)\) — dist massivi va navbat uchun sarflanadigan xotira.
Minora qulashidan oldin, alkimyogar qatorda tizilgan \(n\) ta kristallni (\(a_1, a_2, \dots, a_n\) tartibida, energiyalari mos ravishda) \(m\) ta yordamchisiga taqsimlab berishi kerak. Har bir yordamchi kristallarning ketma-ket (tartibni buzmasdan) bo'lagini oladi — ya'ni massiv aynan \(m\) ta bo'sh bo'lmagan qismga bo'linadi.
Alkimyogar adolatli bo'lishni xohlaydi: eng ko'p energiya olgan yordamchining yukini iloji boricha kamroq qilishni istaydi. Eng kichik mumkin bo'lgan maksimal yukni toping.
Birinchi qatorda ikkita butun son \(n\) va \(m\) beriladi (\(1 \le m \le n \le 2 \times 10^5\)).
Ikkinchi qatorda \(n\) ta butun son \(a_1, \dots, a_n\) beriladi (\(1 \le a_i \le 10^9\)) — kristallarning energiyalari.
Eng kichik mumkin bo'lgan maksimal yukni chop eting.
| # | Input.txt | Output.txt |
|---|---|---|
| 1 |
5 2 7 2 5 10 8 |
18 |
| 2 |
5 3 7 2 5 10 8 |
14 |
| 3 |
7 4 4 8 9 2 3 6 5 |
12 |
1-Test: \(n=5\), \(m=2\), kristallar: \(7, 2, 5, 10, 8\)
Massivni \(2\) ta ketma-ket bo'lakka bo'lamiz: \([7, 2, 5]\) (yig'indi = \(14\)) va \([10, 8]\) (yig'indi = \(18\)). Ikki bo'lakning maksatli maximumi = \(18\). Boshqa har qanday bo'linish bundan kattaroq yuk beradi, shuning uchun eng kichik maksimal yuk = \(18\).
2-Test: \(n=5\), \(m=3\), xuddi shu kristallar
Endi \(3\) ta bo'lakka bo'lamiz: \([7, 2, 5]\) (\(14\)), \([10]\) (\(10\)), \([8]\) (\(8\)). Maksimal yuk = \(14\). Bo'laklar soni oshgani sari yukni tekislash osonlashadi, shuning uchun javob kamaydi (\(18 \rightarrow 14\)).
3-Test: \(n=7\), \(m=4\), kristallar: \(4, 8, 9, 2, 3, 6, 5\)
Optimal bo'linish maksimal yukni \(12\) ga tushiradi. Undan kichik limit bilan bo'lib bo'lmaydi, chunki \(9\) o'zi katta element bo'lib, kamida bitta guruh yukini \(12\) ga yetkazadi.
Bu masalada berilgan massivni tartibini buzmagan holda \(m\) ta ketma-ket bo'lakka bo'lishimiz va har bir bo'lak yig'indilarining eng kattasini (maksimal qismini) imkon qadar kichik qilishimiz talab etiladi.
Asosiy g'oya (Binary Search on Answer):
Massiv elementlari va o'lchami katta bo'lgani uchun (\(\le 2 \times 10^5\)), to'g'ridan-to'g'ri qidirib chiqish vaqt chegarasiga ulgurmaydi. Shuning uchun javobning o'zini ikkilik qidiruv orqali topamiz.
1. Qidiruv chegaralari (low va high):
2. Ochko'zlik (Greedy) yondashuvi:
Ikkilik qidiruv orqali o'rtadagi qiymatni (\(mid\)) eng katta ruxsat etilgan limit deb olamiz. Keyin massivni chapdan o'ngga qarab yig'ib chiqamiz:
Murakkablik
Ikkilik qidiruv taxminan \(O(\log(\text{sum}(a)))\) marta takrorlanadi.
Har bir tekshirish (greedy o'tish) \(O(n)\) vaqt oladi.
Umumiy murakkablik: \(O(n \times \log(\text{sum}(a)))\).