Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using namespace std;
- #include<iostream>
- #include<bitset>
- #include <iomanip>
- const int maxHex = 1048574;
- void ProcessInput(bitset<maxHex> &bs) // Параметърът bitset bs e указател ( & )
- {
- unsigned int x = 0; // Използва се за съхранение на един намерен hex
- char c[5]; // Масив от 5 символа, в който ще пазим 1 hex
- while (true) {
- for (int i = 0; i < 5; ++i) {
- cin >> c[i]; // Вземаме 1 символ от входа
- if(c[i] =='.') // Стигнахме ли края?
- return;
- }
- std::string str(c, c + sizeof c / sizeof c[0]); // Да запишем масива от символи в string
- x = stoul(str, nullptr, 16); // Да превърнем стринга в hex/int
- bs[x] = !bs[x]; // Обръщаме стойноста на bool/bit ( ако е 1/true - да стане 0/false и vice versa )
- }
- }
- int main()
- {
- // Идеята на тази имплементация е:
- // 1. Създаваме и запълваме с 0/false битове, които по брой са равни на максималното шестнайсетично число - fffff
- // 2. Всеки път когато намерим във входа число, инвертеаме бита, който отговаря на него, тоест при първото намиране,
- // този бит ще стане 1/true, при второто - 0/false и т.н. От условието знаем, че всички hex, ще се срещат четен брой пъти.
- // Единствено "DNA of the leader is unique" и ще го срещнем само веднъж.
- // Тоест ако започнем със всички битове сетнати на 0, и винаги когато намерим ново hex число обръщаме неговата стойност (от 0 на 1 или от 1 на 0),
- // то в края ще имаме само 1 единствена единица - ДНК на лидера.
- cin.sync_with_stdio(false); // disables the synchronization between the C and C++ standard streams
- cout.sync_with_stdio(false); // keep in mind that synchronized C++ streams are thread-safe, but this is not
- bitset<maxHex> bs; // Това е все едно масив от bool или bit. Инициализираме го с максимум елементи.
- ProcessInput(bs); // Приемаме и обработваме входящия string
- for (unsigned int i = 0; i < maxHex ; i ++) // Да намерим лидера
- if(bs[i]) {
- cout << setw(5) << setfill('0') << hex << i; // setw(5) и setfill('0') са за да запълним до общо 5 нули нашия хекс. Примерно ако е 1 - да стане 00001
- break;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement