Sumxor

Time limit: 0.5s Memory limit: 32MB Input: sumxor.in Output: sumxor.out

Se dă o permutare AA a numerelor de la 11 la NN. Operatorul \oplus din limbajul C/C++ realizează operația XOR (disjuncție exclusivă pe biți).

Tabela 1: Tabla operație XOR

\oplus 0 1
0 0 1
1 1 0

Cerință

Scrieți un program care să rezolve următoarele două cerințe:

  1. Construiți o altă permutare BB astfel încât expresia E=(A1+B1)(A2+B2)(AN+BN)E = (A_1 + B_1) \oplus (A_2 + B_2) \oplus \dots \oplus (A_N + B_N) să aibă valoare minimă.
  2. Construiți o altă permutare BB astfel încât expresia E=(A1+B1)(A2+B2)(AN+BN)E = (A_1 + B_1) \oplus (A_2 + B_2) \oplus \dots \oplus (A_N + B_N) să aibă valoare maximă.

Date de intrare

Fișierul de intrare sumxor.in conține pe prima linie numărul CC care poate avea valoarea 11 sau 22 în funcție de cerința ce trebuie rezolvată. Pe a doua linie se va afla numărul NN, iar pe a treia linie se vor afla NN numere distincte cuprinse între 11 și NN, reprezentând permutarea AA.

Date de ieșire

Fișierul de ieșire sumxor.out va conține pe prima linie valoarea expresiei EE în funcție de cerință (pentru cerința 11 se va afișa minimul, iar pentru cerința 22 se va afișa maximul). Pe a doua linie se vor afișa NN numere distincte cuprinse între 11 și NN, separate prin câte un spațiu reprezentând o permutare BB cu ajutorul căreia se obține valoarea EE.

Restricții și precizări

  • 1N1 000 0001 \leq N \leq 1 \ 000 \ 000
  • 1AiN1 \leq A_i \leq N, AiAjijA_i \neq A_j \forall i \neq j
  • Dacă există mai multe șiruri BB care satisfac condițiile, puteți afișa oricare dintre ele.
# Punctaj Restricții
1 16 C=1C = 1, 1N101 \leq N \leq 10
2 16 C=2C = 2, 1N101 \leq N \leq 10
3 21 C=1C=1
4 47 C=2C=2

Exemplul 1

sumxor.in

1
2
2 1

sumxor.out

0
1 2

Explicație

E=(2+1)(1+2)=33=0E = (2 + 1) \oplus (1 + 2) = 3 \oplus 3 = 0. 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

E=(4+5)(3+4)(1+3)(5+2)(2+1)=97473=14E = (4 + 5) \oplus (3 + 4) \oplus (1 + 3) \oplus (5 + 2) \oplus (2 + 1) = 9 \oplus 7 \oplus 4 \oplus 7 \oplus 3 = 14. Se poate demonstra că nu se poate obține o valoare mai mare în acest caz.

Log in or sign up to be able to send submissions!