#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 | #64570625 | Utilizator | |
| Fișier | biperm.cpp | Dimensiune | 1.26 KB |
| Data încărcării | 14 Mai 2026, 22:47 | Scor/rezultat | 100 puncte |
biperm.cpp: In function ‘int main()’: biperm.cpp:38:5: warning: this ‘for’ clause does not guard... [-Wmisleading-indentation] 38 | for(i=1;i<=n;i++)printf("%d ",a[i][0]);printf("\n"); | ^~~ biperm.cpp:38:44: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the ‘for’ 38 | for(i=1;i<=n;i++)printf("%d ",a[i][0]);printf("\n"); | ^~~~~~ biperm.cpp:39:5: warning: this ‘for’ clause does not guard... [-Wmisleading-indentation] 39 | for(i=1;i<=n;i++)printf("%d ",a[i][1]);printf("\n"); | ^~~ biperm.cpp:39:44: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the ‘for’ 39 | for(i=1;i<=n;i++)printf("%d ",a[i][1]);printf("\n"); | ^~~~~~ biperm.cpp:7:12: warning: ignoring return value of ‘FILE* freopen(const char*, const char*, FILE*)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 7 | freopen("biperm.in","r",stdin); | ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~ biperm.cpp:8:12: warning: ignoring return value of ‘FILE* freopen(const char*, const char*, FILE*)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 8 | freopen("biperm.out","w",stdout); | ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~ biperm.cpp:9:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 9 | scanf("%d",&n); | ~~~~~^~~~~~~~~ biperm.cpp:10:28: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 10 | for(i=1;i<=n;i++){scanf("%d",&j);a[i][0]=a[i][2]=j;if(f[j])s[j]=i;else f[j]=i;} | ~~~~~^~~~~~~~~ biperm.cpp:11:28: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 11 | for(i=1;i<=n;i++){scanf("%d",&j);a[i][1]=a[i][3]=j;if(f[j])s[j]=i;else f[j]=i;} | ~~~~~^~~~~~~~~
| Test | Timp | Mesaj evaluare | Scor posibil | Scor obținut | ||
|---|---|---|---|---|---|---|
| 1 | 0.001 secunde | Totul corect | 10 | 10 | ||
| 2 | 0.001 secunde | Totul corect | 10 | 10 | ||
| 3 | 0.001 secunde | Totul corect | 10 | 10 | ||
| 4 | 0.001 secunde | Totul corect | 10 | 10 | ||
| 5 | 0.001 secunde | Totul corect | 10 | 10 | ||
| 6 | 0.001 secunde | Totul corect | 10 | 10 | ||
| 7 | 0.001 secunde | Totul corect | 10 | 10 | ||
| 8 | 0.001 secunde | Totul corect | 10 | 10 | ||
| 9 | 0.004 secunde | Totul corect | 10 | 10 | ||
| 10 | 0.004 secunde | Totul corect | 10 | 10 | ||
| Punctaj total | 100 | |||||
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ă.