Cod sursa(job #541615)

Utilizator alexdmotocMotoc Alexandru alexdmotoc Data 25 februarie 2011 12:31:29
Problema Light2 Scor 0
Compilator cpp Status done
Runda Romanian Master in Mathematics and Sciences 2011, Ziua 1 Marime 1.13 kb
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;

vector <long long> poz;
long long n , k  , var , pix = 1000005 , d[50] , dim , poz2;

int caut (long long a)
{
	long long st = 0 , dr = poz2 , mij;
	
	while (st < dr - 1)
	{
		mij = (st + dr) / 2;
		if (poz[mij] <= a)
			st = mij;
		else dr = mij - 1;
	}
	
		
	if (poz[dr] == a)
		return dr;
	else if (poz[st] == a)
		return st;
	return 0;
}


void sterge (long long who)
{
	for (long long i = who ; i < poz2 ; ++i)
		poz[i] = poz[i+1];
}
int main()
{
	ifstream f ("light2.in");
	ofstream g ("light2.out");
	
	
	f >> n;
	
	f >> k;
	
	var = min (n , pix);
	
	for (int i = 1 ; i <= k ; ++i)
		f >> d[i];
	
	for (long long j = d[1] ; j <= var ; j += d[1])
		poz.push_back (j);
	
	poz2 = poz.size();
	
	for (int i = 2 ; i <= k ; ++i)
		for (long long j = d[i] ; j <= var ; j += d[i])
		{	
			int who = caut(j);
			if (caut(j) != 0)
			{
				sterge(who);
				poz2--;
			}
			else 
			{
				poz.push_back (j);
				poz2++;
				sort (poz.begin() , poz.end());
			}
		}
	g << poz2;
	return 0;
}