Cod sursa(job #109659)

Utilizator dushmiMihai-Alexandru Dusmanu dushmi Data 25 noiembrie 2007 12:17:51
Problema Ecuatie Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda 1, Clasele 5-8 Marime 1.89 kb
#include<stdio.h>
#include<math.h>
long as,a,b,c,k,q,p,i,j,cs,l,auxp1,auxp2,auxq1,auxq2,p1[100],p2[100],q1[100],q2[100],m[100][5];
int main()
{
	freopen("ecuatie.in","r",stdin);
	freopen("ecuatie.out","w",stdout);
	scanf("%ld%ld%ld%ld",&a,&b,&c,&k);
	as=sqrt(a);
	for(i=1;i<=as;i++)
		if(a%i==0)
			{
				p1[++q]=i;p2[q]=a/i;
				if(a/i!=i) p1[++q]=a/i;p2[q]=i;
				p1[++q]=-i;p2[q]=-(a/i);
				if(-(a/i)!=-i) p1[++q]=-(a/i);p2[q]=-i;
			}
	cs=sqrt(abs(c));
	for(i=1;i<=cs;i++)
		if(c%i==0)
			{
				q1[++p]=i;q2[p]=c/i;
				if(c/i!=i) q1[++p]=c/i;q2[p]=i;
				q1[++p]=-i;q2[p]=-(c/i);
				if(-(c/i)!=-i) q1[++p]=-(c/i);q2[p]=-i;
			}
	for(i=1;i<=q;i++)
		{
			for(j=1;j<=p;j++)
				if(p1[i]*q2[j]+p2[i]*q1[j]==b)
				{
					m[++l][1]=p1[i];
					m[l][3]=p2[i];
					m[l][2]=q1[j];
					m[l][4]=q2[j];
				}
		}
	for(i=1;i<l;i++)
		for(j=i+1;j<=l;j++)
			if(m[i][1]>m[j][1])
				{
					auxp1=m[i][1];
					auxq1=m[i][2];
					auxp2=m[i][3];
					auxq2=m[i][4];
					m[i][1]=m[j][1];
					m[i][2]=m[j][2];
					m[i][3]=m[j][3];
					m[i][4]=m[j][4];
					m[j][1]=auxp1;
					m[j][2]=auxq1;
					m[j][3]=auxp2;
					m[j][4]=auxq2;
				}
				else if(m[i][1]==m[j][1] && m[i][2]>m[j][2])
					{
						auxp1=m[i][1];
						auxq1=m[i][2];
						auxp2=m[i][3];
						auxq2=m[i][4];
						m[i][1]=m[j][1];
						m[i][2]=m[j][2];
						m[i][3]=m[j][3];
						m[i][4]=m[j][4];
						m[j][1]=auxp1;
						m[j][2]=auxq1;
						m[j][3]=auxp2;
						m[j][4]=auxq2;
					}
	printf("(");
	if(m[k][1]==-1)
		printf("-");
		else if(m[k][1]!=1)
			printf("%ld",m[k][1]);
	printf("x");
	if(m[k][2]<0)
		printf("%ld",m[k][2]);
			else printf("+%ld",m[k][2]);
	printf(")(");
	if(m[k][3]==-1)
		printf("-");
		else if(m[k][3]!=1)
			printf("%ld",m[k][1]);
	printf("x");
	if(m[k][4]<0)
		printf("%ld",m[k][4]);
			else printf("+%ld",m[k][4]);
	printf(")");
	return 0;
}