Cod sursa(job #1202561)

Utilizator andreioneaAndrei Onea andreionea Data 28 iunie 2014 14:25:52
Problema Dtcsu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <unordered_set>
#include <fstream>

#define INFILE "dtcsu.in"
#define OUTFILE "dtcsu.out"

using std::unordered_set;
using std::ifstream;
using std::ofstream;

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 char* input)
{
	long long ret = 0;
	char i;
	while (i = *(input++)) {
		if (isdigit(i))
			ret = ret * 10 + (i - '0');
	}
	return ret;
}
long long parse_long_long_strip_decimal_zeros(const char* input)
{
	long long ret = 0;
	char i;
	long long carry = 10;
	while (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;
	char buffer[30];
	for (auto i = 0; i < 276997; ++i) {
		fin.getline(buffer, 30);
		N = parse_long_long_strip_decimal_zeros(buffer);
		if (N & 1)
			table.insert(N);
	}
	
	fin.getline(buffer, 30);
	Q = parse_long_long(buffer);
	
	long long res = 0;
	auto endIterator = table.end();
	for (auto i = 0; i < Q; ++i) {
		fin.getline(buffer, 30);
		N = parse_long_long_strip_decimal_zeros(buffer);
		res += (table.find(strip_binary_zeros(N)) != endIterator) ? 1 : 0;
	}
	
	fin.close();
	ofstream fout(OUTFILE);
	fout << res;
	fout.close();
}