Sunteți pe pagina 1din 3

Ministerul Educaţiei Nat, ionale

Lotul Nat, ional Lărgit de Informatică 2019 - Seniori


Deva, România, 12-19 mai 2019 Baraj 2

Problema 3. Wildcards
Fis, ier header: wildcards.h
Limită de timp: 0.25 secunde
Limită de memorie: 1024 megabytes

Numim pattern un s, ir nevid format doar din caracterele 0, 1 s, i ?. Spunem că două patternuri A s, i B de
aceeas, i lungime se potrivesc dacă s, i numai dacă caracterele ? pot fi ı̂nlocuite convenabil cu 0 s, i 1 astfel
ı̂ncât cele două s, iruri să devină identice. De exemplu, pentru A = “110?1”, B = “1?001”, C = “??1?1”,
s, irurile A s, i B se potrivesc (se poate forma s, irul “11001” prin ı̂nlocuirea semnelor de ı̂ntrebare cu valori),
dar s, irurile A s, i C nu se potrivesc.
Se dă un arbore (graf neorientat conex aciclic) cu N noduri. Se cere să se atribuie fiecărui nod câte un
s, ir format din caracterele 0, 1 s, i ? (un pattern) astfel ı̂ncât să se respecte următoarele proprietăt, i:

• Toate patternurile să aibă aceeas, i lungime, care să fie cât mai mică (a se vedea rubrica Punctare).
• Pentru oricare două noduri distincte u s, i v, patternurile asociate acestora se potrivesc dacă s, i
numai dacă există muchia (u, v) ı̂n arbore.

Detalii de implementare
Vet, i implementa funct, ia cu următorul antet:
std::vector<std::string> patterns(std::vector<std::pair<int, int>> edges)

Funct, ia patterns va fi apelată exact o dată ı̂n cadrul unui test. Vectorul edges va avea dimensiune N − 1
s, i va reprezenta muchiile neorientate ale arborelui date ca perechi de noduri adiacente. Formal, edgesi este
egal cu o pereche (ui , vi ) (0 ≤ i < N − 1, 1 ≤ ui , vi ≤ N ), cu semnificat, ia că există o muchie neorientată
ı̂ntre nodurile ui s, i vi . Nodurile sunt indexate de la 1. Se garantează că muchiile vor forma un graf conex
aciclic.
Funct, ia trebuie să returneze un vector care să cont, ină exact N patternuri nevide de aceeas, i lungime,
formate doar din caracterele 0, 1 s, i ? (nu obligatoriu toate trei). S, irul de pe pozit, ia i (0 ≤ i < N ) va
reprezenta patternul asociat nodului cu indicele i + 1.
Pentru ca solut, ia să fie validă, trebuie ca patternurile returnate să respecte condit, iile ment, ionate mai sus.
În caz contrar, graderul va termina programul s, i va nota testul ca fiind incorect.

Punctare
Atent, ie! Această problemă este punctată part, ial. Testele din cadrul fiecărui subtask vor avea
asociată o lungime maximă pragsup acceptată. Orice răspuns returnat de funct, ia voastră care cont, ine
patternuri mai lungi decât această lungime va fi considerat un răspuns incorect pe acest test.
Există, de asemenea, s, i un prag de lungime praginf care asigură punctajul maxim pe testul respectiv.
Dacă funct, ia returnează o solut, ie mai bună decât pragul inferior de lungime, aceasta va primi punctajul
maxim pe test. Dacă lungimea patternurilor returnate este ı̂ntre aceste două limite, punctajul primit va
fi calculat după formula:
⌊ ⌋
1 pragsup − ans + 1
punctaj = · Psubtask · (1 + )
2 pragsup − praginf + 1

Aici ans reprezintă lungimea patternurilor din răspunsul returnat de concurent, iar Psubtask reprezintă
punctajul alocat subtask-ului din care face parte respectivul test, iar ⌊x⌋ reprezintă partea ı̂ntreagă
inferioară a numărului real x. A se observa că, pentru ans = praginf , se obt, ine ı̂ntreg punctajul testului,
iar pentru ans = pragsup , se obt, ine jumătate din punctajul testului.
Punctajul total acordat unui subtask este egal cu minimul punctajelor acordate fiecărui test
din cadrul subtask-ului.

Pagina 5 din 7
Ministerul Educaţiei Nat, ionale
Lotul Nat, ional Lărgit de Informatică 2019 - Seniori
Deva, România, 12-19 mai 2019 Baraj 2

Subtask Punctaj Constrângeri


1 6 puncte 2 ≤ N ≤ 10
praginf = 100
pragsup = 100
2 9 puncte 2 ≤ N ≤ 100
praginf = 100
pragsup = 100
3 5 puncte 2 ≤ N ≤ 10 000
praginf = 34
pragsup = 34
Arborele este un lant, de N noduri
4 6 puncte 2 ≤ N ≤ 10 000
praginf = 34
pragsup = 34
Arborele este binar complet
5 42 de puncte 2 ≤ N ≤ 10 000
praginf = 101
pragsup = 200
6 32 de puncte 2 ≤ N ≤ 10 000
praginf = 34
pragsup = 42

Model de grader
Graderul va citi de la consolă datele de intrare ı̂n următorul format:
• linia 1: N
• linia 1 + i (1 ≤ i ≤ N − 1): ui vi (separate prin spat, iu), reprezentând muchia (ui , vi )
Graderul va afis, a la consolă răspunsul vostru, ı̂n următorul format:
• linia i (1 ≤ i ≤ N ): pi , reprezentând patternul asociat nodului i

Exemple
intrare ies, ire
4 ???
1 2 000
1 3 0?1
1 4 11?
3 0
1 2 ?
2 3 1
5 ?00
1 2 000
1 3 1??
3 4 110
3 5 101
2 ?
2 1 ?

Pagina 6 din 7
Ministerul Educaţiei Nat, ionale
Lotul Nat, ional Lărgit de Informatică 2019 - Seniori
Deva, România, 12-19 mai 2019 Baraj 2

Explicat, ie
Aceasta este figura pentru primul, respectiv cel de-al treilea exemplu:

Pagina 7 din 7

S-ar putea să vă placă și