#3727
Polihroniade
O matrice pătratică de dimensiuni N * N
cu N
par și elemente din mulțimea {0,1}
se numește tablă de șah dacă oricare două celule vecine pe o linie sau pe o coloană au valori diferite (cu alte cuvinte, dacă nu există două valori egale alăturate).
De ziua ei, Victor i-a cumpărat Elisabetei o astfel de matrice A
, care nu este neapărat tablă de șah. Aflând despre pasiunea ei, acesta vrea acum să transforme matricea A
într-o tablă de șah. Timpul fiind limitat, el poate efectua doar următoarele tipuri de operații asupra matricei:
1. Interschimbă liniile i
și j
din A
(celelalte linii rămân neschimbate, iar valorile din interiorul liniilor i
și j
rămân neschimbate și își păstrează ordinea). Operația are sens pentru 1 ≤ i, j ≤ N
.
2. Interschimbă coloanele i
și j
din A
(celelalte coloane rămân neschimbate, iar valorile din interiorul coloanelor i
și j
rămân neschimbate și își păstrează ordinea). Operația are sens pentru 1 ≤ i, j ≤ N
.
Dorind s-o impresioneze pe Elisabeta, Victor apelează la voi, programatori renumiți, să-l ajutați în a transforma matricea A
într-o tablă de șah. Pentru aceasta, Victor are nevoie de următoarele informații:
1. Poate fi transformată matricea A
în tablă de șah?
2. Care este numărul minim de operații necesare pentru a duce la îndeplinire acest scop?
3. Care ar fi o succesiune de operații care transformă matricea A
într-o tablă de șah?
OJI 2021, clasele XI-XII
Problema | Polihroniade | Operații I/O | tastatură/ecran |
---|---|---|---|
Limita timp | 0.5 secunde | Limita memorie |
Total: 256 MB
/
Stivă 8 MB
|
Id soluție | #35441745 | Utilizator | |
Fișier | polihroniade.cpp | Dimensiune | 6.57 KB |
Data încărcării | 09 Martie 2022, 16:26 | Scor / rezultat | 70 puncte |
polihroniade.cpp: In function 'bool areEqual(std::vector<bool>&, std::vector<bool>&)': polihroniade.cpp:9:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for(int i = 0; i < a.size(); ++i) ^ polihroniade.cpp: In function 'void Solve231(std::vector<std::vector<bool> >)': polihroniade.cpp:103:38: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if(stC.size() + stL.size() < _min) ^ polihroniade.cpp: In function 'void Solve232(std::vector<std::vector<bool> >)': polihroniade.cpp:139:38: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if(stC.size() + stL.size() < _min) ^ polihroniade.cpp: In function 'void Solve233(std::vector<std::vector<bool> >)': polihroniade.cpp:178:38: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if(stC.size() + stL.size() < _min) ^ polihroniade.cpp: In function 'void Solve234(std::vector<std::vector<bool> >)': polihroniade.cpp:217:38: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if(stC.size() + stL.size() < _min) ^
Test | Timp | Mesaj evaluare | Scor posibil | Scor obținut | ||
---|---|---|---|---|---|---|
1 | 0 secunde | Corect! | 10 | 10 | ||
2 | 0.016 secunde | Corect! | 15 | 15 | ||
3 | 0.02 secunde | Corect! | 15 | 15 | ||
4 | 0 secunde | Gresit! | 5 | 0 | ||
5 | 0.004 secunde | Gresit! | 5 | 0 | ||
6 | 0.004 secunde | Gresit! | 6 | 0 | ||
7 | 0.008 secunde | Corect! | 6 | 6 | ||
8 | 0.016 secunde | Gresit! | 6 | 0 | ||
9 | 0.04 secunde | Corect! | 6 | 6 | ||
10 | 0 secunde | Corect, dar numarul de operatii nu este minim! | 4 | 2 | ||
11 | 0.004 secunde | Corect, dar numarul de operatii nu este minim! | 4 | 2 | ||
12 | 0.004 secunde | Corect, dar numarul de operatii nu este minim! | 4 | 2 | ||
13 | 0.008 secunde | Corect, dar numarul de operatii nu este minim! | 4 | 2 | ||
14 | 0.016 secunde | Corect! | 5 | 5 | ||
15 | 0.04 secunde | Corect! | 5 | 5 | ||
Punctaj total | 70 |
www.pbinfo.ro permite evaluarea a două tipuri de probleme:
Problema Polihroniade face parte din prima categorie. Soluția propusă de tine va fi evaluată astfel:
Suma punctajelor acordate pe testele utilizate pentru verificare este 100. Astfel, soluția ta poate obține cel mult 100 de puncte, caz în care se poate considera corectă.