GurgerBrill

Time limit: 0.75s Memory limit: 256MB Input: Output:

,,Faci problema, nu faci problema, tot shaorma bagi după''

Se știu două lucruri despre cina festivă: faptul că se va servi shaorma și modul de așezare al invitaților. Vor fi NN persoane numerotate de la 11 la NN și o cameră cu o masă rotundă care are exact NN locuri, iar fiecare persoană are un loc distinct rezervat ce nu este încă dezvăluit.

Pentru a descoperi locul rezervat fiecărei persoane se pot organiza QQ întâlniri ale celor NN invitați în sala de mese. Înainte de fiecare întâlnire poți stabili ordinea în care vor veni persoanele la aceasta. La finalul fiecărei întâlniri vi se dă lista invitaților care au ajuns la aceasta înaintea ambilor vecini din așezarea secretă de la masă.

Cerință

Să se afle locurile rezervate fiecărui invitat pe baza informațiilor obținute din cele QQ întâlniri.

Detalii de implementare

Trebuie să implementezi următoarea funcție

std::vector<int> find_places(int N);

Această funcție trebuie să returneze răspunsul, care reprezintă modul de așezare al invitaților la masă. Orice soluție în care fiecare din invitați au aceeași vecini ca în așezarea aleasă de comisie, va fi considerată corectă. Șirul întors de funcție este indexat de la 00.

Poți folosi următoarea funcție în implementarea soluției tale.

std::vector<int> query(std::vector<int> order);

Această funcție va returna pentru întâlnirea stabilită (dată prin ordinea în care cele NN persoane ajung la întâlnire) un șir format din numerele de ordine ale persoanelor care au ajuns la întâlnire înaintea ambilor vecini din așezarea secretă de la masă.

Această funcție primește ca parametru indicii persoanelor în ordinea în care se așază la masă în cadrul unei întâlniri. Această funcție va întoarce șirul numerelor de ordine ale persoanelor care au ajuns la întâlnire înaintea ambilor vecini din așezarea secretă de la masă. Șirul dat ca parametru trebuie să fie o permutare a numerelor de la 11 la NN și trebuie indexat de la 00.

Nu uita să incluzi header-ul gurgerbrill.h!

Restricții

Interactorul nu este adaptiv. Permutarea nu se schimbă indiferent de întâlnirile pe care le stabilește concurentul.

# Punctaj NN QminQ_\text{min} QmaxQ_\text{max}
1 3 33 100100 100100
2 4 44 100100 100100
3 5 5050 1 2501\ 250 2 5002\ 500
4 13 1 0001\ 000 2 0002\ 000 3 0003\ 000
5 15 2 0002\ 000 100100 200200
6 60 100 000100\ 000 6060 100100

Formulă de scoring

Fie QconcQ_{\text{conc}} numărul de interogări făcute de concurent. Fie PP punctajul asociat grupei de teste.

  • Dacă QconcQminQ_{\text{conc}} \leq Q_{\text{min}}, atunci se primesc PP puncte pe test.
  • Dacă Qconc>QmaxQ_{\text{conc}} > Q_{\text{max}} atunci se primesc 0 puncte pe test.
  • Altfel, scorul concurentului este P3(1+2QmaxQconcQmaxQmin) \displaystyle \frac{P}{3} \left( 1 + 2 \frac{Q_{\text{max}} - Q_{\text{conc}}}{Q_{\text{max}} - Q_{\text{min}}} \right)

Exemplu

Se apelează find_places cu N=7N = 7:
Concurent: query({6,1,5,7,4,3,2})\text{query}(\{6, 1, 5, 7, 4, 3, 2\})
Grader: {6,5}\{6, 5\}
Concurent: query({1,5,7,4,3,2,6})\text{query}(\{1, 5, 7, 4, 3, 2, 6\})
Grader: {1,5}\{1, 5\}
Concurent: query({5,7,4,3,2,6,1})\text{query}(\{5, 7, 4, 3, 2, 6, 1\})
Grader: {5,4}\{5, 4\}
Concurent: query({7,4,3,2,6,1,5})\text{query}(\{7, 4, 3, 2, 6, 1, 5\})
Grader: {7,4,3}\{7, 4, 3\}
Concurent: query({4,3,2,6,1,5,7})\text{query}(\{4, 3, 2, 6, 1, 5, 7\})
Grader: {4,3}\{4, 3\}
Concurent: query({3,2,6,1,5,7,4})\text{query}(\{3, 2, 6, 1, 5, 7, 4\})
Grader: {3,2}\{3, 2\}
Concurent: query({2,6,1,5,7,4,3})\text{query}(\{2, 6, 1, 5, 7, 4, 3\})
Grader: {2,6,5}\{2, 6, 5\}
find_places returnează {1,6,3,5,7,2,4}\{1, 6, 3, 5, 7, 2, 4\}

Log in or sign up to be able to send submissions!