Yechim tahlili

Kristallar va portal siri

Muallif: __thecrash__

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:

  1. Agar \(a_i \pmod k == 0\) bo'lsa, unga mos keluvchi ikkinchi sonning qoldig'i ham \(0\) bo'lishi kerak \((0 + 0 \equiv 0 \pmod k)\).
  2. Agar \(a_i \pmod k == r\) bo'lsa \((r > 0)\), unga mos keluvchi ikkinchi sonning qoldig'i \(k - r\) bo'lishi kerak, shunda ularning yig'indisi \(r + (k - r) = k\) bo'lib, \(k\) ga qoldiqsiz bo'linadi.

Algoritm (Chastota massivi yoki Hash Map yordamida):

  1. Massivdagi har bir elementni qarab chiqamiz va ularning \(k\) ga bo'lgandagi qoldig'ini topamiz: \(r = a_i \pmod k\).
  2. Har bitta qoldiq necha marta uchraganini hisoblab borish uchun chastota massividan (map yoki massiv) foydalanamiz.
  3. Hozirgi \(a_i\) elementi uchun, undan oldin kelgan va bizga mos keladigan qoldiqga ega elementlar sonini umumiy javobga qo'shamiz:
    — Agar \(r == 0\) bo'lsa, oldindan uchragan qoldig'i \(0\) bo'lgan elementlar sonini qo'shamiz.
    — Agar \(r > 0\) bo'lsa, oldindan uchragan qoldig'i \(k - r\) bo'lgan elementlar sonini qo'shamiz.
  4. Oxirida barcha mos juftliklar yig'indisini chiqaramiz.

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.

Navbatdagi musobaqa