#1041
Pentru un număr natural nenul n, să considerăm toate numerele naturale nenule mai mici sau egale cu n, luând fiecare număr de câte două ori: 1, 1, 2, 2, 3, 3, ... , n, n. Aceste numere le amestecăm aleator, şi le aranjăm pe două linii a câte n elemente. Structura astfel obţinută o vom numi o bipermutare. În figurile 1, 2 şi 3 avem câte un exemplu de bipermutare pentru n=5.
O bipermutare este perfectă, dacă ambele linii ale structurii reprezintă câte o permutare (vezi figurile 2 şi 3).
Prin mutare pe poziţia p, înţelegem interschimbarea elementelor de pe aceeaşi coloană p. În exemplele de mai jos, bipermutarea perfectă din figura 2 s-a obţinut din bipermutarea din figura 1, aplicând o mutare pe poziţa 2. Bipermutarea perfectă din figura 3 s-a obţinut din bipermutarea din figura 1, aplicând mutări pe poziţiile 1, 2, 4 şi 5.

Cunoscând o bipermutare, determinaţi:
OJI 2013, clasele XI-XII
| Problema | Biperm | Operații I/O |
biperm.in/biperm.out
|
|---|---|---|---|
| Limita timp | 1 secunde | Limita memorie |
Total: 128 MB
/
Stivă 64 MB
|
| Id soluție | #63341930 | Utilizator | |
| Fișier | biperm.cpp | Dimensiune | 2.52 KB |
| Data încărcării | 26 Februarie 2026, 21:00 | Scor/rezultat | Eroare de compilare |
biperm.cpp: In function 'void cicl(int)': biperm.cpp:41:5: error: 'viz' was not declared in this scope viz[idx] = 1; ^ In file included from /usr/include/c++/4.8/cstdbool:39:0, from /usr/include/i386-linux-gnu/c++/4.8/bits/stdc++.h:56, from biperm.cpp:1: biperm.cpp:47:20: error: return-statement with a value, in function returning 'void' [-fpermissive] return true; ^ biperm.cpp:51:22: error: could not convert 'cicl(i)' from 'void' to 'bool' if(cicl(i)) ^ In file included from /usr/include/c++/4.8/cstdbool:39:0, from /usr/include/i386-linux-gnu/c++/4.8/bits/stdc++.h:56, from biperm.cpp:1: biperm.cpp:52:24: error: return-statement with a value, in function returning 'void' [-fpermissive] return true; ^ biperm.cpp:56:12: error: return-statement with a value, in function returning 'void' [-fpermissive] return false; ^ biperm.cpp: In function 'void start(int)': biperm.cpp:61:5: error: 'viz' was not declared in this scope viz[idx] = 1; ^ biperm.cpp:64:18: error: 'gt' was not declared in this scope for(auto i : gt[idx]) ^ biperm.cpp: In function 'int main()': biperm.cpp:118:33: error: 'viz' was not declared in this scope if(g[i].size() == 1 && !viz[i]) ^ biperm.cpp:120:22: error: could not convert 'cicl(i)' from 'void' to 'bool' if(cicl(i)) ^ biperm.cpp:134:5: error: 'viz' was not declared in this scope viz = 0; ^ biperm.cpp:138:13: error: 'gt' was not declared in this scope if(!gt[i].empty() && !viz[i]) ^ biperm.cpp:143:33: error: too few arguments to function 'int Find(int)' if(top == 2 || Find()) ^ biperm.cpp:12:5: note: declared here int Find(int x) ^
www.pbinfo.ro permite evaluarea a două tipuri de probleme:
Problema Biperm 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ă.