Pagini recente » Cod sursa (job #1544587) | Cod sursa (job #1978875) | Cod sursa (job #2511974) | Cod sursa (job #584572) | Cod sursa (job #1038705)
#include <fstream>
#include <unordered_set>
using namespace std;
unordered_set<unsigned long long> hashtable;
int binSearch(const unsigned long long &val) {
int left = 1, right = 32;
int best = 0;
while (left <= right) {
int mid = (left + right) / 2;
unsigned long long div = 1LL << mid;
if (val % div == 0) {
best = mid;
left = mid + 1;
} else {
right = mid - 1;
}
}
return best;
}
int main() {
ifstream in("dtcsu.in");
string buffer;
unsigned long long number = 0;
for (int i = 0; i < 276997; ++i) {
number = 0;
getline(in, buffer);
int j, size = buffer.size();
for (j = 0; j < size; ++j) {
number = number * 10 + buffer[j] - '0';
}
if (number & 1) {
hashtable.insert(number);
}
}
int Q, count = 0;
unordered_set<unsigned long long>::iterator not_found = hashtable.end();
in >> Q;
getline(in, buffer);
for (int i = 0; i < Q; ++i) {
number = 0;
getline(in, buffer);
int j, size = buffer.size();
for (j = 0; j < size; ++j) {
number = number * 10 + buffer[j] - '0';
}
int iterator = 0;
if (number & 1) {
count += hashtable.find(number) != not_found;
} else {
number >>= binSearch(number);
count += hashtable.find(number) != not_found;
}
}
in.close();
ofstream out("dtcsu.out");
out << count;
out.close();
return 0;
}