#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 |
![]() |
---|---|---|---|
Limita timp | 0.5 secunde | Limita memorie |
Total: 256 MB
/
Stivă 8 MB
|
Id soluție | #28988616 | Utilizator | |
Fișier | polihroniade.cpp | Dimensiune | 3.22 KB |
Data încărcării | 26 Martie 2021, 08:53 | Scor / rezultat | Eroare de compilare |
polihroniade.cpp: In function 'void cer23()': polihroniade.cpp:87:40: error: converting to 'std::vector<std::tuple<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, int> >::value_type {aka std::tuple<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, int>}' from initializer list would use explicit constructor 'constexpr std::tuple< <template-parameter-1-1> >::tuple(_UElements&& ...) [with _UElements = {const char (&)[2], int, int}; <template-parameter-2-2> = void; _Elements = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, int}]' sol1.push_back({"L", i + 1, j + 1}); ^ polihroniade.cpp:98:40: error: converting to 'std::vector<std::tuple<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, int> >::value_type {aka std::tuple<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, int>}' from initializer list would use explicit constructor 'constexpr std::tuple< <template-parameter-1-1> >::tuple(_UElements&& ...) [with _UElements = {const char (&)[2], int, int}; <template-parameter-2-2> = void; _Elements = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, int}]' sol1.push_back({"C", i + 1, j + 1}); ^ polihroniade.cpp:113:40: error: converting to 'std::vector<std::tuple<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, int> >::value_type {aka std::tuple<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, int>}' from initializer list would use explicit constructor 'constexpr std::tuple< <template-parameter-1-1> >::tuple(_UElements&& ...) [with _UElements = {const char (&)[2], int, int}; <template-parameter-2-2> = void; _Elements = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, int}]' sol2.push_back({"L", i + 1, j + 1}); ^ polihroniade.cpp:124:40: error: converting to 'std::vector<std::tuple<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, int> >::value_type {aka std::tuple<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, int>}' from initializer list would use explicit constructor 'constexpr std::tuple< <template-parameter-1-1> >::tuple(_UElements&& ...) [with _UElements = {const char (&)[2], int, int}; <template-parameter-2-2> = void; _Elements = {std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, int}]' sol2.push_back({"C", i + 1, j + 1}); ^ polihroniade.cpp: In function 'void fisier()': polihroniade.cpp:165:29: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result] freopen(".in" , "r", stdin); ^ polihroniade.cpp:166:30: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result] freopen(".out", "w", stdout); ^
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ă.