Cod sursa(job #1036596)

Utilizator deividFlorentin Dumitru deivid Data 19 noiembrie 2013 14:50:00
Problema Dtcsu Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include<stdio.h>
#include<algorithm>

#define buff_size 20000

using namespace std;

FILE*f=fopen("dtcsu.in","r");
FILE*g=fopen("dtcsu.out","w");

int ch,sol;
const int n = 276997;
char buff[buff_size+5];
long long A[100000];

inline long long next () {
	long long r = 0;
	
	while ( !(buff[ch] >= '0' && buff[ch] <= '9') ){
		++ch;
		if ( ch == buff_size ){
			fread(buff,1,buff_size,f);
			ch = 0;
		}
	}
	
	while ( buff[ch] >= '0' && buff[ch] <= '9'){
		r = r * 10 + buff[ch]-'0';
		++ch;
		if ( ch == buff_size ){
			fread(buff,1,buff_size,f);
			ch = 0;
		}
	}
	
	++ch;
	if ( ch == buff_size ){
		fread(buff,1,buff_size,f);
		ch = 0;
	}
	
	return r;
}

int main () {
	
	long long x = 0;
	for ( int i = 1 ; i <= n ; ++i ){
		
		x = next();
		
		if ( x % 11 == 0 )	continue ;
		A[++A[0]] = x;
	}
	
	int q = next();
	
	sort(A+1,A+A[0]+1);
	
	int left,middle,right;
	for ( int i = 1 ; i <= q ; ++i ){
		x = next();
		
		while ( x % 11 == 0 )	x /= 11;
		
		left = 1,right = A[0];
		while ( left <= right ){
			middle = (left+right)>>1;
			
			if ( A[middle] == x ){
				++sol; break ;
			}
			if ( A[middle] < x ){
				left = middle+1;
			}
			else{
				right = middle-1;
			}
		}
	}
	
	fprintf(g,"%d\n",sol);
	
	fclose(f);
	fclose(g);
	
	return 0;
}