Pagini recente » Istoria paginii runda/eusebiu1 | Cod sursa (job #1202562)
#include <unordered_set>
#include <fstream>
#include <string>
#define INFILE "dtcsu.in"
#define OUTFILE "dtcsu.out"
using std::unordered_set;
using std::ifstream;
using std::ofstream;
using std::string;
inline long long strip_binary_zeros(long long l)
{
if (l && !(l&1))
return l / (l & -l);
return l;
}
long long parse_long_long(const string& input)
{
long long ret = 0;
char i;
for (auto&i : input){
if (isdigit(i))
ret = ret * 10 + (i - '0');
}
return ret;
}
long long parse_long_long_strip_decimal_zeros(const string& input)
{
long long ret = 0;
char i;
long long carry = 10;
for(auto &i : input) {
if (isdigit(i))
if (i != '0'){
ret = ret * carry + i - '0';
carry = 10;
}
else
carry *= 10;
}
return ret;
}
int main()
{
unordered_set<long long> table;
ifstream fin(INFILE);
long long Q, N;
string line;
for (auto i = 0; i < 276997; ++i) {
std::getline(fin, line);
N = parse_long_long(line);
if (N & 1)
table.insert(N);
}
std::getline(fin, line);
Q = parse_long_long(line);
long long res = 0;
auto endIterator = table.end();
for (auto i = 0; i < Q; ++i) {
std::getline(fin, line);
N = parse_long_long_strip_decimal_zeros(line);
res += (table.find(strip_binary_zeros(N)) != endIterator) ? 1 : 0;
}
fin.close();
ofstream fout(OUTFILE);
fout << res;
fout.close();
}