Tagy: bruteforce
Obtiažnosť: easy

Vojaci 2

Úloha má to isté zadanie ako úloha Vojaci

Obmedzenia

Tentokrát máme iné obmedzenia. Platia nasledovné nerovnosti: Platí $1\leq k\leq n\leq \mathbf{1000}$, $1\leq d\leq 10$ a pribudla nová podmienka navyše: ${n \choose k} \cdot (n+k^3 d) \leq 10\,000\,000$.

Tretia, odstrašujúco pôsobiaca nerovnosť, nám hovorí nasledovné: Ak vygenerujeme všetkých ${n\choose k}$ možných $k$-členných hliadok, pre každú vyskúšame všetkých $k$ možných veliteľov, a zakaždým hrubou silou spočítame jej kompatibilitu, spravíme nanajvýš 10 miliónov logických krokov (čo je málo).

Rozmyslite si ale, že už si nemôžeme dovoliť vygenerovať všetkých $2^n$ podmnožín vojakov, lebo $2^{1000}$ je strašne veľa. Musíme teda nejako vygenerovať len všetky $k$-prvkové podmnožiny a žiadne iné.

Dobrá rada: Existuje funkcia next_permutation. Zistite si, ako sa používa a čo robí. Potom si zistite, čo sa stane, ak ju dokola spúšťate na poli, ktoré obsahuje nasledovné hodnoty: $(0,0,0,0,1,1,1)$. Ako vám to pomôže vyriešiť úlohu?

Bonus: Nechce sa vám písať for-cyklus na výber veliteľa? Skúste namiesto toho vymyslieť trik, ako výber veliteľa spraviť priamo počas výberu konkrétnej podmnožiny pomocou next_permutation.

Vstup, výstup, príklady

... sú opäť všetky rovnaké ako v úlohe vojaci.

(Ale nezabudnite tentokrát na uloženie kompatibility hliadky použiť dostatočne veľkú premennú!)

Ak chceš riešiť túto úlohu, musíš sa najprv prihlásiť.