#154
Fiind date n numere naturale a1 , a2 ... an , se calculează ai ^ aj , pentru oricare i şi j (1 ≤ i < j ≤ n) şi se obţine un şir de valori naturale. Cu caracterul ^ s-a notat operatorul sau exclusiv pe biți (xor) şi se aplică conform regulii din tabelul de mai jos.

Fiind date cele n valori şi un număr natural nenul m, 1 ≤ m ≤ n*(n-1)/2, să se determine al m-lea număr din şirul obținut mai sus, considerând valorile în ordine crescătoare.
| Problema | xor | Operații I/O |
xor.in/xor.out
|
|---|---|---|---|
| Limita timp | 0.2 secunde | Limita memorie |
Total: 64 MB
/
Stivă 8 MB
|
| Id soluție | #58088502 | Utilizator | |
| Fișier | xor.cpp | Dimensiune | 1.09 KB |
| Data încărcării | 13 Mai 2025, 15:04 | Scor/rezultat | Eroare de compilare |
xor.cpp:1:1: error: expected unqualified-id before string constant "// solutia oficiala\n\n#include <iostream>\n#include <fstream>\n#include <cstring>\n\nusing namespace std;\n\n#define NMAX 100000\n#define KMAX 20\n#define VMAX (1 << KMAX)\n\nint a[NMAX];\nint counter[VMAX];\n\nint main()\n{\n fstream fin(\"xor.in\");\n ofstream fout(\"xor.out\");\n\n int n, m;\n int i, k, j;\n long long counterXor0;\n int len = 2;\n int result = 0;\n\n fin >> n >> m;\n\n for (i = 0; i < n; i++)\n fin >> a[i];\n\n for (k = KMAX - 1; k >= 0; k--) {\n memset(counter, 0, sizeof(counter));\n for (i = 0; i < n; i++)\n counter[a[i] >> k]++;\n\n counterXor0 = 0;\n result <<= 1;\n\n for (i = 0; i < len; i++) {\n j = i ^ result;\n if (i == j)\n counterXor0 += (long long)counter[i] * (counter[i] - 1) / 2;\n if (i < j)\n counterXor0 += (long long)counter[i] * counter[j];\n }\n\n if (counterXor0 < m) {\n result++;\n m -= counterXor0;\n }\n\n len *= 2;\n }\n\n fout << result;\n\n return 0;\n}\n" ^
www.pbinfo.ro permite evaluarea a două tipuri de probleme:
Problema xor 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ă.