Atenţie! Aceasta este o versiune veche a paginii, scrisă la 2020-12-18 11:29:47.
Revizia anterioară   Revizia următoare  

 

Fişierul intrare/ieşire:hidden_points.in, hidden_points.outSursăWinter Challenge 2020
AutorAlexandru Petrescu, Mihai-Cristian PopescuAdăugată dewinterchallenge2020Comisia winterchallenge2020
Timp execuţie pe test2.1 secLimită de memorie200000 kbytes
Scorul tăuN/ADificultateN/A

Vezi solutiile trimise | Statistici

Hidden Points

Jon şi Daenerys trebuie să găsească un plan de atac pentru a învinge armata morţilor. Cei doi ştiu exact numărul inamicilor, dar nu şi poziţiile acestora. Pentru a afla locaţiile lor, Jon îi dă lui Daenerys ecuaţia unei drepte iar apoi ea zboară cu dragonii săi şi numără câţi inamici se află strict la stânga dreaptei. Cei doi repetă procesul până când Jon reuşeşte să găsească poziţiile tuturor inamicilor. Deoarece Jon nu se pricepe la probleme de geometrie, acesta vă roagă pe voi să îl ajutaţi. Vi se dă N, numărul inamicilor, iar voi trebuie să le aflaţi poziţiile folosindu-vă de query-uri de tip:

  • ? X1 Y1 X2 Y2, unde X1, Y1, respectiv X2, Y2 reprezintă coordonatele a două puncte în plan. Veţi primi în schimb un număr care reprezintă numărul de puncte aflate la stânga dreptei determinată de punctele (X1, Y1), (X2, Y2) (vezi restricţii şi precizări pentru definiţia exactă).
  • ! X1 Y1 X2 Y2 ... XN YN, unde XP, YP, reprezintă coordonatele poziţiilor găsite. Acest tip de query se va face o singură dată.

Interacţiune

Iniţial se citeşte din stdin numărul N. Trebuie să printaţi un query şi să daţi flush la stdout. Dacă faceţi un query de primul tip atunci trebuie să citiţi din stdin răspunsul la query, altfel închideţi programul.

Restricţii

  • 1 ≤ N ≤ 2000
  • Coordonatele punctelor sunt numere întregi.
  • Pentru punctele ascunse, 1 ≤ X, Y ≤ 100.000.
  • Pentru interogari, 0 ≤ X, Y ≤ 100.001.
  • Pentru 20 puncte, N ≤ 10 şi pentru toate punctele 0 ≤ X, Y ≤ 10.
  • Pentru alte 20 puncte, coordonatele Xi si Yi a oricarui punct sunt distincte.
  • Dacă folosiţi puncte cu coordonate neîntregi la query, luaţi 80% din punctajul pe test.
  • Pentru toate subtaskurile mai puţin primul, dacă folosiţi între 75001 şi 100000 query-uri, luaţi 30% din punctajul pe test (această restricţie este multiplicativă cu cea precedentă şi nu se aplică la primul subtask).
  • Punctul (X, Y) se află la stânga dreptei determinate de punctele (A, B), (C, D) dacă şi numai dacă AD + CY + XB > BC + DX + YA
  • Dacă se dau două puncte identice la o interogare de tipul 1, se vor lua 0 puncte, cu mesajul "Wrong interaction!"
  • Dacă query-ul este invalid sau depăşiţi limita de query-uri veţi primi ca răspuns valoarea -1 şi se va termina programul.

Exemplu

stdinstdoutExplicatie
3
 
Se citeşte numărul de puncte
 
? 1 5 4 2
Query cu punctele (1, 5), (4, 2)
2
 
Punctele (4, 5), (6, 2)
 
? 4 2 1 5
Query cu punctele (4, 2), (1, 5)
1
 
Punctul (1, 2)
 
! 1 2 4 5 6 2
Punctele găsite

Explicaţie

Trebuie sa te autentifici pentru a trimite solutii. Click aici

Cum se trimit solutii?