| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1 초 | 1024 MB | 5 | 4 | 3 | 75.000% |
Jonas su Artūru žaidžia žaidimą. Jonas išdėlioja dvi kortelių sekas, kiekvienoje po N kortelių. Ant kiekvienos kortelės užrašytas sveikasis skaičius kuris gali būti nuo 1 iki N. Kiekvienoje sekoje visi skaičiai sutinkami lygiai vieną kartą.
Artūras kortelių nemato ir jo tikslas yra sužinoti kokie skaičiai užrašyti ant kiekvienos kortelės.
Jis gali daug kartų atlikti tokią užklausą: pasirinkti kortelę A iš pirmosios sekos, kortelę B iš antrosios ir paklausti Jono, kuri iš jų yra didesnė. Jonas į tokį klausimą jam atsako „A didesnė už B“, „B didesnė už A“, arba „kortelės vienodos“.
Artūrui šis žaidimas pasirodė labai sudėtingas, tad su Jono sutikimu jis paprašė tavo pagalbos. Padėk Artūrui sugalvoti strategiją, kaip sužinoti koks skaičius užrašytas ant kiekvienos kortelės atliekant kuo mažiau užklausų.
Ši užduotis yra interaktyvi! Jums reikės rašyti užklausas, o sistema į jas atsakinės.
Pirmoje įvesties eilutėje pateiktas skaičius N – kiekvienos kortelių sekos ilgis.
Toliau galite pateikti užklausas. Užklausa pateikiama išvedant (cout/printf) eilutę
? a b
Eilutė pradedama klaustuku ir nurodomi du tarpais atskirti sveikieji skaičiai 1 ≤ a, b ≤ N, kur a yra kortelės iš pirmosios sekos numeris, o b – kortelės iš antros sekos numeris.
Po užklausos pateikimo, sistema atspausdins skaičių ats:
Atlikę visas užklausas išveskite Jono išdėliotas kortelių sekas:
Jei užklausą pateiksite neteisingu formatu (pvz. po klaustuko išvesite tris skaičius vietoje dviejų) arba atliksite per daug užklausų, įvestyje bus pateiktas skaičius -2 ir Jūsų programa turi baigti darbą.
Kitu atveju (tęsiant išvedimą/įvedimą po -2 nuskaitymo) programos vykdymas sistemoje bus nutrauktas ir pateiktas pranešimas:
Vykdymas nutrauktas (tai galėjo įvykti viršijus atminties ribojimus).
Užtikrinkite, kad po kiekvienos užklausos jūsų išvestis iš karto pasiektų sistemą: atlikę užklausą, C++ kalboje naudokite cout << endl; arba cout.flush();, o C kalboje – fflush(stdout);.
Tarkime pirmosios sekos kortelės yra 1 3 2, o antrosios – 2 1 3. Tokiu atveju galimas toks sprendimas:
| Įvestis | Išvestis | Paaiškinimas |
|---|---|---|
| 3 | N | |
| ? 2 2 | Lyginame abiejų sekų antras korteles. | |
| 1 | Pirmoji kortelė didesnė (3 > 1). | |
| ? 2 1 | Lyginame pirmos sekos antrą kortelę su antros sekos pirma kortele. | |
| 1 | Pirmoji kortelė didesnė (3 > 2). | |
| ? 2 3 | Lyginame pirmos sekos antrą kortelę su antros sekos trečia kortele. | |
| 0 | Abi kortelės vienodos (3 = 3). | |
| ? 1 1 | Lyginame abiejų sekų pirmas korteles. | |
| -1 | Pirmoji kortelė mažesnė (1 < 2). | |
|
! 1 3 2 2 1 3 |
Pateikiamas atsakymas. |
Visiems testams galioja ribojimai 1 ≤ N ≤ 200.
Visoms užklausoms galioja −1 ≤ ats ≤ 1 (jei jūsų programa pateikė per daug užklausų ats bus -2, nuskaičius šį skaičių programa turi sustoti daryti užklausas). 1 ≤ a, b ≤ N
| 번호 | 배점 | 제한 |
|---|---|---|
| 1 | 1 | N = 1, galima atlikti ≤ 1 užklausą |
| 2 | 4 | N = 2, galima atlikti ≤ 4 užklausas |
| 3 | 36 | N = 3, galima atlikti ≤ 9 užklausas |
| 4 | 10 | xi = i visiems i (t.y. pirma seka yra išrikiuota) Galima atlikti ≤ 5 000 užklausų |
| 5 | 17 | xi = yi visiems i (t.y. atitinkamos sekų kortelės sutampa) Galima atlikti ≤ 5 000 užklausų |
| 6 | 14 | Galima atlikti ≤ 40 000 užklausų |
| 7 | 32 | Galima atlikti ≤ 15 000 užklausų |
| 8 | 58 | Galima atlikti ≤ 5 000 užklausų |
Čia x1, ..., xN žymi pirmosios sekos kortelių skaičius, o y1, ..., yN – antrosios sekos kortelių skaičius.
Olympiad > Lithuanian Olympiad in Informatics > Lithuanian Olympiad in Informatics 2021/2022 > National Round (2) > 7-9 Classes ?번