Cerință
Există obiecte numerotate și porți de securitate numerotate . Fiecare poartă de securitate are asociată o submulțime secretă de obiecte .
Poți trimite un pachet format dintr-o submulțime nevidă a celor obiecte. Pachetul trece prin porțile de securitate în ordine crescătoare. Poarta de securitate confiscă pachetul dacă este impar. Pachetul este oprit la prima poartă, care îl confiscă. După trimiterea pachetului sunteți anunțați despre indexul porții de securitate care l-a oprit.
Se garantează că fiecare pachet nevid este confiscat de una din porțile de securitate.
O poartă de securitate este numită dacă există un pachet pentru care această poartă este prima care îl confiscă. Se poate demonstra că există exact useful security gates. Fie indicii acestora, în ordine crescătoare:
Misiunea ta este să trimiți pachetele astfel încât pentru orice , poarta de securitate confiscă exact dintre pachetele trimise.
Poți alege fiecare pachet pe baza răspunsurilor obținute pentru pachetele trimise anterior.
Interacțiune
Programul nu va citi date de la intrare și nu va face afișări. Concurentul trebuie să implementeze funcția:
void solve(int N, int M)
- : numărul de obiecte.
- : numărul de porți de securitate.
- Această funcție este apelată exact o singură dată pentru fiecare testcase.
Funcția solve() poate apela următoarea funcție:
int send_package(std::vector<int> P)
- trebuie să conțină indicii unei submulțimi nevid de obiecte.
- Procedura returnează indicele primei porți de securitate care confiscă .
- Fiecare obiect poate apărea cel mult o singură dată în .
Modelul graderului . Aceasta înseamnă că mulțimile sunt fixate înainte de apelul solve.
Exemplu
Presupunem că și , iar submulțimile secrete sunt:
În acest caz, porțile de securitate utile sunt și . Poarta 1 nu este utilă, deoarece orice pachet, pe care îl poate confisca aceasta, a fost deja confiscat de poarta .
O posiblă secvență de apeluri pentru send_package este:
| Pachet P | A returnat poarta |
|---|---|
De exemplu, pachetul trece prin porțile și deoarece intersecția lui cu fiecare dintre submulțimile lor are o dimensiune pară. El este mai apoi confcat de poarta .
În final, poarta a confiscat pachete, poarta a confiscat pachete, și poarta a confiscat package. pachet. Prin urmare, obiectivul a fost atins.
Submulțimile secrete sunt prezentate doar pentru ilustrarea exempului. Ele nu sunt transmise către programul tău.
Restricții și precizări
- Fiecare pachet nevid este confiscat de o careva poartă de securitate.
- sunt exact porți de securitate utile.
| Subtask | Scor | Restricții |
|---|---|---|
| 1 | 7 | pentru fiecare , și . |
| 2 | 9 | pentru fiecare . |
| 3 | 6 | pentru fiecare , și . |
| 4 | 14 | pentru fiecare . |
| 5 | 31 | pentru fiecare . |
| 6 | 33 | Fără restricții suplimentare. |
Testare locală
Grader-ul local citește inputul în următorul format:
- linia 1:
- linia 2 + ():
Aici, este numărul de obiecte în mulțimea .
Grader-ul local apelează solve(N, M) și simulează funcția send_package.
După ce solve se termină, grader-ul local printează unul dintre următoarele mesaje:
Correctdacă toate porțile utile au fost găsite și fiecare poartă utilă a confiscat exact pachete.You did not find all useful gatesdacă mai puțin de porți au confiscat cel puțin un pachet.Wrongdacă toate porțile utile au fost găsite, dar numărul necesar de pachete nu a fost confiscat de fiecare dintre ele.Invalid packageifsend_packageeste apelat cu un pachet nevalid. În acest caz, graderul local se închide imediat.