Cod sursa(job #1202562)

Utilizator andreioneaAndrei Onea andreionea Data 28 iunie 2014 14:37:48
Problema Dtcsu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#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();
}