Cod sursa(job #109510)

Utilizator FlorianFlorian Marcu Florian Data 25 noiembrie 2007 11:31:34
Problema Ecuatie Scor 10
Compilator cpp Status done
Runda preONI 2008, Runda 1, Clasa a 9-a Marime 1.29 kb
#include<stdio.h>
#include<stdlib.h>
FILE*f=fopen("ecuatie.in","r");
FILE*g=fopen("ecuatie.out","w");
long a,b,c,p1,p2,q1,q2,k,p;
int det_ecuatiaK()
	{
	long i,j;
	p=0;
	for(i=-abs(a);i<=abs(a);++i)
		{
		if(i!=0&&a%i==0)
			{
			p1=i; p2=a/i;
			for(j=-(abs(c));j<=abs(c);++j)
				{
				if(j!=0&&c%j==0)
					{
					q1=j;
					q2=c/j;
					if(q2*p1+q1*p2==b)
						{
						p++;
						if(p==k) return 1;
						}
					}
				}
			}
		}
	return 0;
	}
int main()
	{
	fscanf(f,"%ld %ld %ld %ld",&a,&b,&c,&k);
	if(det_ecuatiaK()==0) fprintf(g,"-1");
	else
		{
		//p1,p2,q1,q2: (p1x+q1)(p2x+q2)
		fprintf(g,"(");
		if(p1!=1&&p1!=-1) fprintf(g,"%ldx",p1);
		else
			{
			if(p1==1) fprintf(g,"x");
			else fprintf(g,"-x");
			}
		if(q1!=1&&q1!=-1)
			{
			if(q1>0) fprintf(g,"+%ld)(",q1);
			else fprintf(g,"%ld)(",q1);
			}
		else
			{
			if(q1==1) fprintf(g,"+1)(");
			else fprintf(g,"-1)(");
			}
		if(p2!=1&&p2!=-1)
			{
			if(p2>0) fprintf(g,"%ldx",p2);
			else fprintf(g,"%ldx",p2);
			}
		else
			{
			if(p2==1) fprintf(g,"x");
			else fprintf(g,"-x");
			}
		if(q2!=1&&q2!=-1)
			{
			if(q2>0) fprintf(g,"+%ld)",q2);
			else fprintf(g,"%ld)",q2);
			}
		else
			{
			if(q2==1) fprintf(g,"+1)");
			else fprintf(g,"-1)");
			}
		}
	return 0;
	}