Cod sursa(job #964427)

Utilizator miu_mik93FMI - Paduraru Miruna miu_mik93 Data 20 iunie 2013 22:23:56
Problema Factorial Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.89 kb
#include <stdio.h>
#include <math.h>
#include <iostream>
#include <string>
using namespace std;
/*struct Arbore
{
	int inf;
	Arbore *st, *dr;
};
Arbore *Cauta(Arbore *r, int x)
{
	if (!r)
		return 0;
	if (r->inf == x)
		return r;
	if (r->inf < x)
		return Cauta(r->st, x);
	return Cauta(r->dr, x);
}
void Inserare(Arbore *&r, int x)
{
	Arbore *p = new Arbore, *q = r;
	p->inf = x; p->st = p->dr = NULL;
	if (!r)
	{
		r = p;
		return ;
	}
	while (1)
	{
		if (q->inf == x)
		{
			delete p;
			return ;
		}
		if (x < q->inf)
		{
			if (q->st)
				q = q->st;
			else
			{
				q->st = p;
				return;
			}
		}
		if (x > q->inf)
		{
			if (q->dr)
				q = q->dr;
			else
			{
				q->dr = p;
				return;
			}
		}

	}

}
void Stergere(Arbore *&r, int x)
{
	Arbore *p = r, *t = NULL, *max, *tmax, *fiu;
	while (p && p->inf != x)
	{
		t = p;
		if (x < p->inf)
			p = p->st;
		else
			p = p->dr;
	}
	if (!p) return ; // Nu se gaseste x in arbore
	if (p->st && p->dr)
	{
		tmax = p;
		max = p->st;
		while (max->dr)
		{
			tmax = max;
			max = max->dr;
		}
		p->inf = max->inf;
		t = tmax;
		p = max;
	}
	if (p->st)
		fiu = p->st;
	else
		fiu = p->dr;
	if (t)
		if (t->st == p)
			t->st = fiu;
		else
			t->dr = fiu;
	else
		r = fiu;
	delete p;
}
Arbore *r;*/
int minim(int n, int *a, int b, int inf, int sup, int k)
{
	int min = 1.e20;
	for(int i=0; i<n; i++)
	{
		for (int j = inf; j<=sup; j++)
			if (min > a[i]*j)
				min = a[i] * j;
	}
	return min;
}
int maxim(int n, int *a, int b, int inf, int sup, int k)
{
	int max = -1.e20;
	for(int i=0; i<n; i++)
	{
		for (int j = inf; j<=sup; j++)
			if (max < a[i]*j)
				max = a[i] * j;
	}
	return max;
}
struct nod
{
	int info;
	nod *adrurm;
}*v, *sf;
void Adaugare(int nr, nod *&v, nod *&sf)
{
	nod *d;
	if (!v)
	{
		v = new nod; 
		v->info = nr;
		v->adrurm = v;
		sf = v;
	}
	else
	{
		d = new nod;
		d ->info = nr;
		sf->adrurm = d;
		d->adrurm = v;
		sf = d;
	}
}
int n;
void elimin(nod *&v, int val, nod *&sf)
{
	nod *aux;
	if (v->info == val)
	{
		aux = v;
		v = v->adrurm;
	}
	else
	{
		nod *c = v;
		while (c->adrurm->info != val)
			c = c->adrurm;
		aux = c->adrurm;
		c->adrurm = aux->adrurm;
		if (aux == sf)
			sf = c;
	}
	delete aux;
}
int sMin[100], c[100], j;
int p;
FILE *f;
FILE *g;
void caut(int li, int ls)
{
	int m = (li + ls) / 2;
	int nr = 0, i;
	for (i=5; nr < p; i+=5)
	{
		int copie_i = i;
		while(copie_i % 5 == 0)
		{
			copie_i /= 5;
			nr++;
		}
	}
	if(nr == p)
	{
		fprintf(g, "%d", i-5);
		return;
	}
	else
		if (li < ls)
		{
			if (p < nr)
				caut(li, m);
			else
				caut(m, ls);
		}
		else
			fprintf(g, "%d", -1);
}

int main()
{
	int i; 
	f = fopen("fact.in", "r"); fscanf(f, "%d", &p);
	fclose(f);
	g = fopen("fact.out", "w");
	caut(1, 100000000);
	fclose(g);
	return 0; 
}