Pagini recente » Cod sursa (job #896949) | Cod sursa (job #1955190) | Cod sursa (job #524662) | Cod sursa (job #63237) | Cod sursa (job #109380)
Cod sursa(job #109380)
#include <stdio.h>
int sus[51],jos[51],n;
int sel[51];
int sus_fact_2_max,sus_fact_3_max,sus_fact_5_max;
int jos_fact_2_max,jos_fact_3_max,jos_fact_5_max;
int sus_fact_2[51],sus_fact_3[51],sus_fact_5[51];
int jos_fact_2[51],jos_fact_3[51],jos_fact_5[51];
int smax = 0,sol[51];
int calculeaza ()
{
int i;
int fact_2 = 1,fact_3 = 1,fact_5 = 1;
for (i = 1;i <= sus_fact_2_max - jos_fact_2_max; ++i)
fact_2 *= 2;
for (i = 1;i <= sus_fact_3_max - jos_fact_3_max; ++i)
fact_3 *= 3;
for (i = 1;i <= sus_fact_5_max - jos_fact_5_max; ++i)
fact_5 *= 5;
if (fact_2 * fact_3 * fact_5 == 1)
return 0;
else
return fact_2 * fact_3 * fact_5;
}
void check_sum()
{
int suma = 0;
if (sus_fact_2_max >= jos_fact_2_max && sus_fact_3_max >= jos_fact_3_max && sus_fact_5_max >= jos_fact_5_max)
{
suma = calculeaza ();
if (suma > smax)
{
smax = suma;
int aux;
for (aux = 1;aux <= n ;aux ++)
sol[aux] = 0;
for (aux = 1;aux <= n ;aux ++)
if (sel[aux])
sol[aux] = 1;
}
}
}
void sum_max(int k,int poz)
{
if (k != n+1)
{
check_sum();
int l;
for (l = poz; l <= n; l++)
if (!sel[l])
{
sel[l] = 1;
sus_fact_2_max += sus_fact_2[l];
sus_fact_3_max += sus_fact_3[l];
sus_fact_5_max += sus_fact_5[l];
jos_fact_2_max += jos_fact_2[l];
jos_fact_3_max += jos_fact_3[l];
jos_fact_5_max += jos_fact_5[l];
sum_max(k+1,l);
sus_fact_2_max -= sus_fact_2[l];
sus_fact_3_max -= sus_fact_3[l];
sus_fact_5_max -= sus_fact_5[l];
jos_fact_2_max -= jos_fact_2[l];
jos_fact_3_max -= jos_fact_3[l];
jos_fact_5_max -= jos_fact_5[l];
sel[l] = 0;
}
}
}
int fact(int x,int k)
{
int c = 0;
while (x % k == 0 && x>0)
{
c++;
x = x/k;
}
return c;
}
void citire()
{
int i;
freopen("aliens.in","r",stdin);
scanf("%d",&n);
for (i = 1;i <= n; ++i)
{
scanf("%d %d",&sus[i],&jos[i]);
sus_fact_2[i] = fact(sus[i],2);
sus_fact_3[i] = fact(sus[i],3);
sus_fact_5[i] = fact(sus[i],5);
jos_fact_2[i] = fact(jos[i],2);
jos_fact_3[i] = fact(jos[i],3);
jos_fact_5[i] = fact(jos[i],5);
}
}
int main ()
{
int i;
citire();
sum_max(1,1);
freopen("aliens.out","w",stdout);
printf("%d",smax);
return 0;
}