# PBinfo #4143 – Ghicitoare – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: deivid

## Enunț

Cerința
Fie un număr natural nenul n, cunoscut. RAU-Gigel alege un număr oarecare din intervalul închis [1,n], fie acesta x. Apoi calculează “suma XOR” S = 1 ^ 2 ^ ... ^ (x-2)  ^ (x-1) ^ (x+1) ^ (x+2) ^ ... ^ n pe care v-o comunică. Puteți să-l ghiciți pe x ? RAU-Gigel nu prea are răbdare, el vrea repede un răspuns de la voi. 

Am notat cu ^ operația XOR (operatorul de disjuncție exclusivă).

Ca să fie sigur că nu nimeriți din întâmplare răspunsul, RAU-Gigel vă testează de mai multe ori.

Date de intrare
Fișierul de intrare ghicitoare.in conține pe prima linie un număr natural T reprezentând numărul de teste / ghicitori pe care RAU-Gigel vi le propune, apoi T linii care conțin perechi de forma n S, separate printr-un spațiu, cu semnificația de mai sus. 

Date de ieșire
Fișierul de ieșire ghicitoare.out va conține T rânduri, cu răspunsurile x, în ordinea solicitării, câte unul pe linie, la ghicitorile lui RAU-Gigel.

Restricții și precizări

1 ≤ T ≤ 10,  1 ≤ n ≤ 1.000.000.000, 0 ≤ S ≤ 1.000.000.000, 1 ≤ x ≤ n
Pentru teste în valoare de 10 de puncte: T = 2, n  ≤ 100
Pentru teste în valoare de alte 30 de puncte: n  ≤ 1.000.000

Exemplu:
ghicitoare.in

2
5 2
10 14
ghicitoare.out

3
5
Explicație
RAU-Gigel vă propune 2 ghicitori. 

La prima ghicitoare avem: n = 5, S = 2. Numărul căutat este 3. Intr-adevăr,
S = 1 ^ 2 ^ 4 ^ 5 = 
|001| ^
|010| ^
|100| ^
|101| = 
|010| = 2        (am notat cu |a| reprezentarea binară a lui a)

La a doua ghicitoare avem: n = 10, S = 14. Numărul căutat este 5. Intr-adevăr,
S = 1 ^ 2 ^ 3 ^ 4 ^ 6 ^ 7 ^ 8 ^ 9 ^ 10  are valoarea 14.

## Cod sursă C++

```cpp
#include <fstream>
using namespace std;
ifstream in("ghicitoare.in");
ofstream out("ghicitoare.out");
int main()
{
    int T, n, x, S, S1, p;
    in >> T;
    for (int t = 1; t <= T; ++t)
    {
        in >> n >> S;
        S1 = 0;
        for (int i = n/4*4; i <= n; ++i)
            S1 ^= i;
        out << (S ^ S1) << '\n';
    }
    in.close();
    out.close();
    return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/4143)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/4143/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-4143/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
