Atenţie! Aceasta este o versiune veche a paginii, scrisă la 2018-06-14 13:37:19.
Revizia anterioară   Revizia următoare  

 

Fişierul intrare/ieşire:bitconnect.in, bitconnect.outSursăJunior Challenge 2018
AutorRapeanu GeorgeAdăugată deJuniorChallenge2018Junior Challenge JuniorChallenge2018
Timp execuţie pe test0.75 secLimită de memorie262144 kbytes
Scorul tăuN/ADificultateN/A

Vezi solutiile trimise | Statistici

Bitconnect

Hei hei hei Eddie Valoare a tot căutat o metodă de îmbogăţire rapidă pentru a-şi cumpăra sticle de Tedi pe care să le bea împreuna cu fraţii săi, şi în sfârşit i-a venit o idee garantată succesului: acesta îşi va creea propria criptomonedă(numita junior coin,sau prescurtat jc). Totul a mers bine până când Eddie a trebuit să implementeze crypto currency-ul. Prima provocare a acestuia a fost efectuarea tranzacţiilor.

Modul de efectuare a tranzacţiilor operează după un model şmenar, care poate fi descris în felul următor:

  • fiecare boss are asociat un număr
  • între 2 bossi este o favoare frăţeasca dacă and-ul între numerele lor este nenul(între x şi y există o favoare frăţeasca, dacă şi numai dacă x & y != 0)
  • pentru a efectua o tranzacţie de la x la y,se doreşte ca aceasta sa folosească cât mai puţine favoruri frăţeşti; pentru ca favorurile nu sunt ceva uşor de obţinut Eddie ar dori sa ştie care este numărul minim de favoruri prin care trec mai multe tranzacţii. Totuşi, Eddie nu e mulţumit: el ştie ca moneda lui va avea un succes aproape instant, aşadar în final moneda trebuie sa respecte 3 tipuri de operaţii:
    • add(x) - bossul x se decide sa se alăture familiei monedei. Intre el şi bossii vechi se formează favoruri frăţeşti. Se garantează ca x nu face parte din familie.
    • erase(x) - bossul x a câştigat destulă valoare şi decide sa nu mai investească în moneda. Aşadar el trebuie eliminat şi toate favorurile pe care le avea trebuie şterse.
    • transaction(x,y) - Eddie vrea sa afle numărul minim de favoruri folosite pentru a fi efectuata o tranzacţie de la x la y,se garantează ca x şi y fac parte din familie.

Deoarece Eddie ştie că ceea ce cere este prea greu, el va da 2 variante de a raspunde la queryuri:

  • bit mode - trebuie să spuneţi numărul minim de favoruri; aceasta varianta va primi 100% din punctaj/test
  • connect mode - trebuie să spuneţi doar dacă exista un mod de a efectua tranzacţia de la x la y; această variantă va primi 25% din punctaj/test

Date de intrare

Pe prima linie Q, care reprezintă numărul de operaţii.
Pe fiecare din următoarele Q linii va apărea t,care reprezinta tipul operaţiei( 1=insert,2=erase,3=transaction ), x şi y(dacă t = 3)

Date de ieşire

Pe prima linie va apărea modul în care vreţi sa răspundeţi( bit/connect ).
Pe următoarele linii vor apărea răspunsurile operaţiilor de tip 3 fiecare pe câte o linie separata

Restricţii

*pentru 4% din punctaj raspunsul va fi 0,1,sau -1
*pentru alte 12% din punctaj N <= 2000
*pentru alte 16% din puncta N <= 5000
*pentru alte 20% din punctaj N <= 55000
*pentru restul de 48% din punctaj N <= 105000

Exemplu

bitconnect.inbitconnect.out
25
1 1
1 2
3 1 2
1 3
1 4
3 1 2
3 1 3
3 1 4
3 2 4
1 5
3 1 4
3 2 4
3 3 4
1 7
3 1 4
3 1 5
3 2 7
2 3
2 5
3 1 4
3 2 7
1 5
3 1 7
3 5 2
3 7 4
3 7 7
bit
-1
2
1
-1
-1
2
3
2
2
1
1
2
1
1
2
1
0

Explicaţie

...

Trebuie sa te autentifici pentru a trimite solutii. Click aici

Cum se trimit solutii?