Cod sursa(job #109419)

Utilizator marius135Dumitran Adrian Marius marius135 Data 25 noiembrie 2007 11:01:09
Problema Aliens Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda 1, Clasa a 10-a Marime 0.81 kb
#include<stdio.h>
#include<stdlib.h>
double p;
long sol[32];
void afisare(long a)
{
	printf("%ld\n",a-1);
	for(long i=a-1;i>=1;i--)
		printf("%ld ",sol[i]);
	printf("\n");
	exit(0);
}
double abs2(double a)
{
	if(a<0) return -a;
	return a;
}

int ver(double a,double b)
{
	
	if (abs2(a-b)< 0.0000000000001) return 1;
	return 0;
}

void cauta(double a,long b,long c)
{
	long q;
	if(ver(a,0))
	{
		afisare(b);
	}
	if(b>20) return ;
	if(a>=1) p = 1;
	else p = 1/a;
	q = p;
	if(ver(q,p)==0) q++;
	double r = a/(20-b);
	r = 1/r;r++;
	if(r>100000) r = 100000;
	if(q<=c) q = c+1;
	for(;q<=r;q++)
	{
		sol[b] = q;
		cauta(a-(double)1/q,b+1,q);
		
	}
}

int main()
{
	long n,m;
	freopen("1541.in","r",stdin);
	
	scanf("%ld %ld",&n,&m);
	
	cauta((double)(n)/m,1,0);
	
	return 0;
}