Se dă o permutare a numerelor de la la . Operatorul din limbajul C/C++ realizează operația XOR (disjuncție exclusivă pe biți).
Tabela 1: Tabla operație XOR
0 | 1 | |
0 | 0 | 1 |
1 | 1 | 0 |
Cerință
Scrieți un program care să rezolve următoarele două cerințe:
- Construiți o altă permutare astfel încât expresia să aibă valoare minimă.
- Construiți o altă permutare astfel încât expresia să aibă valoare maximă.
Date de intrare
Fișierul de intrare sumxor.in
conține pe prima linie numărul care poate avea valoarea sau în funcție de cerința ce trebuie rezolvată. Pe a doua linie se va afla numărul , iar pe a treia linie se vor afla numere distincte cuprinse între și , reprezentând permutarea .
Date de ieșire
Fișierul de ieșire sumxor.out
va conține pe prima linie valoarea expresiei în funcție de cerință (pentru cerința se va afișa minimul, iar pentru cerința se va afișa maximul). Pe a doua linie se vor afișa numere distincte cuprinse între și , separate prin câte un spațiu reprezentând o permutare cu ajutorul căreia se obține valoarea .
Restricții și precizări
- ,
- Dacă există mai multe șiruri care satisfac condițiile, puteți afișa oricare dintre ele.
# | Punctaj | Restricții |
---|---|---|
1 | 16 | , |
2 | 16 | , |
3 | 21 | |
4 | 47 |
Exemplul 1
sumxor.in
1
2
2 1
sumxor.out
0
1 2
Explicație
. Aceasta este valoarea minimă ce se poate obține.
Exemplul 2
sumxor.in
2
5
4 3 1 5 2
sumxor.out
14
5 4 3 2 1
Explicație
. Se poate demonstra că nu se poate obține o valoare mai mare în acest caz.