Mai intai trebuie sa te autentifici.
Diferente pentru problema/shopping intre reviziile #40 si #6
Diferente intre titluri:
Shopping
shopping
Diferente intre continut:
== include(page="template/taskheader" task_id="shopping") ==
$K0kalaru47$a intrat într-o nouă încurcătură! Prietenul său,$Marele Anonim$, şi-a cumpărat de curând o permutare $p$ de o frumuseţe nemaiauzită. Curios din fire,$K0kalaru47$vrea să afle permutarea.$Marele Anonim$i-a zis doar că are lungimea $N$ şică *$1$apareînaintea lui $2$* în permutarea $p$, şi adecis să nu dezvăluie în mod direct alte informaţii. În schimb, îi va răspunde la mai multe întrebări.
Kokalaru47 a intrat într-o nouă încurcătură! Prietenul său, Marele Anonim, şi-a cumpărat de curând o permutare $p$ de o frumuseţe nemaiauzită. Curios din fire, Kokalaru47 vrea să afle permutarea, însă Marele Anonim i-a zis doar că are lungimea $N$ şi a decis să nu dezvăluie în mod direct alte informaţii. În schimb, îi va răspunde la mai multe întrebări.
Într-o întrebare,$K0kalaru47$îi dă$Marelui Anonim$două stringuri $A$ şi $B$ de lungime $N$.$Marele Anonim$creează apoi alte două stringuri $C$şi$D$ astfel încât $A=C{~p{~1~}~}C{~p{~2~}~}C{~p{~3~}~}...C{~p{~N~}~}$ şi $B=D{~p{~1~}~}D{~p{~2~}~}D{~p{~3~}~}...D{~p{~N~}~}$. În final,$Marele Anonim$răspunde la întrebare cu lungimea prefixului maximal comun dintre $C$ şi $D$ în care există *cel mult o nepotrivire*.
Într-o întrebare, Kokalaru47 îi dă Marelui Anonim două stringuri $A$ şi $B$ de lungime $N$. Marele Anonim creează apoi alte două stringuri $C = A{~p{~1~}~}A{~p{~2~}~}A{~p{~3~}~}...A{~p{~N~}~}$ şi $D = B{~p{~1~}~}B{~p{~2~}~}B{~p{~3~}~}...B{~p{~N~}~}$. În final, Marele Anonim răspunde la întrebare cu lungimea prefixului maximal comun dintre $C$ şi $D$ în care există *cel mult o nepotrivire*.
Înainte de a-i pune $Marelui Anonim$ o întrebare, $K0kalaru47$ trebuie să cumpere ingredientele pentru întrebarea respectivă. El merge, aşadar, la String Shopping City şi achizitionează $2*N$ litere mici ale alfabetului englez ({$N$} pentru stringul $A$ şi $N$ pentru stringul $B$). Se ştie că litera care apare pe pozitia $c$ în alfabet costă $c-1$ parai. De asemenea, ingredientele folosite la o întrebare nu pot fi refolosite la o altă întrebare ulterioară.
Înainte de a-i pune Marelui Anonim o întrebare, Kokalaru47 trebuie să cumpere ingredientele pentru întrebarea respectivă. El merge, aşadar, la Magazinul de Stringuri şi achizitionează 2N litere mici ale alfabetului englez (N pentru stringul A şi N pentru stringul B). Se ştie că litera care apare pe pozitia $c$ în alfabet costă $c-1$ parai. De asemenea, ingredientele folosite la o întrebare nu pot fi refolosite la o altă întrebare ulterioară.
h2. Cerinţă
Ajutaţi-l pe K0kalaru47 să afle permutarea misterioasă fară să-şi depăşească bugetul de $P$ parai.
Ajutaţi-l pe Kokalaru47 să afle permutarea misterioasă fară să-şi depăşească bugetul de P parai.
h2. Interacţiune Prima dată se va citi valoarea $T$, ce reprezintă numărul testelor ce trebuie rezolvate. Pentru fiecare test, se va citi apoi $N$, reprezentând lungimea permutării căutate.
După aceea, programul vostru poate pune întrebări sub forma $"? A B"$, unde $A$ si $B$ sunt stringuri de lungime $N$. Aceste intrebari vor fi scrise in stdout. Răspunsul la o întrebare va putea fi cititapoidin stdin.
Programul vostru poate pune apoi întrebări sub forma *$"? A B"$*, unde $A$ si $B$ sunt stringuri de lungime $N$. Aceste intrebari vor fi scrise in stdout. Răspunsul la o întrebare va putea fi citit din stdin.
Când aţi găsit permutarea căutată $p$, afişaţi $"! p{~1~} p{~2~} p{~3~} ... p{~N~}"$.
Când aţi găsit permutarea căutată $p$, afişaţi *$"! p{~1~} p{~2~} p{~3~} ... p{~N~}"$*.
h2. Precizări
* Citirea şi afişarea se vor face cu *standard input/output*. * După fiecare operaţie trebuie afişat caracterul newline ({$'\n'$} sau {$endl$}) şi trebuie dat *flush la bufferul de ieşire* (folosind $cout.flush()$ sau $fflush(stdout)$). * Dacă la o întrebare primiţi răspunsul $-1$, înseamnă că întrebarea nu a respectat formatul descris mai sus. În acest caz, trebuie să întrerupeţi interacţiunea imediat.
Citirea şi afişarea se vor face cu *standard input/output*. După fiecare operaţie trebuie afişat caracterul newline('\n' sau endl) şi trebuie dat *flush la bufferul de ieşire* (folosind cout.flush() sau fflush(stdout)).
* *Infoarena oferă pentru limbajele C/C++ şi Rust câte un template care se ocupă direct de interacţiuni, pe care le puteţi găsi* "AICI":https://infoarena.ro/template_shopping. * *Dacă se afişează permutarea greşită interactorul returnează $-1$ şi opreşte interacţiunea.*
h2. Restricţii şi punctare
table(example). |_. Nr test |_. $T$ |_. $N$ |_. $P$ |_. Punctaj | | 1 | 5 | 8 | $10^1000^$ | 10p | | 2 | 5 | 50 | $10^1000^$ | 10p | | 3 | 5 | 200 | 2000 | 30p | | 4 | 5 | 200 | 840 | 20p | | 5 | 5 | 200 | 440 | 30p |
h2. Exemplu
table(example). |_. standard input (cin) |_. standard output (cout) | |2 4 3 1 1 4 4 1 |     ? zzzz zzab ? abcd efca ? cacf cbdz ! 3 1 4 2 ? aqqq azqq ? abcc bacc ! 1 2 3 4 |
table(example). |_. shopping.in |_. shopping.out | | This is some text written on multiple lines. | This is another text written on multiple lines. |
h3. Explicaţie
În primul test, permutarea căutată este $p = (3 1 4 2)$. Interacţiunea începe prin citirea valorii $N = 4$. În prima întrebare, $A = zzzz$ şi $B = zzab$. Avem $C = zzzz$ şi $D = zbza$. Cel mai lung prefix comun dintre $C$ şi $D$ în care există cel mult o nepotrivire este cel de lungime $3$. Costul acestei întrebări este costul pentru a cumpăra literele $z$, $z$, $z$, $z$, $z$, $z$, $a$ şi $b$, deci este $25+25+25+25+25+25+0+1=151$. În a doua întrebare, $A = abcd$ şi $B = efca$. Avem $C = bdac$ şi $D = faec$. Cel mai lung prefix comun dintre $C$ şi $D$ în care există cel mult o nepotrivire este cel de lungime $1$. Costul acestei întrebări este costul pentru a cumpăra literele $a$, $b$, $c$, $d$, $e$, $f$, $c$ şi $a$, deci este $0+1+2+3+4+5+2+0=17$. În a treia întrebare, $A = cacf$ şi $B = cbdz$. Avem $C = afcc$ şi $D = bzcd$. Cel mai lung prefix comun dintre $C$ şi $D$ în care există cel mult o nepotrivire este cel de lungime $1$. Costul acestei întrebări este costul pentru a cumpăra literele $c$, $a$, $c$, $f$, $c$, $b$, $d$ şi $z$, deci este $2+0+2+5+2+1+3+25=40$. Costul total pentru rezolvarea primului test este $151 + 17 + 40 = 208$. Interacţiunea va continua prin citirea valorii $N = 4$ corespunzătoare următorului test.
...
== include(page="template/taskfooter" task_id="shopping") ==