Cod sursa(job #109505)

Utilizator MarcvsHdrMihai Leonte MarcvsHdr Data 25 noiembrie 2007 11:30:20
Problema Pairs Scor 20
Compilator cpp Status done
Runda preONI 2008, Runda 1, Clasa a 10-a Marime 1.27 kb
# include <stdio.h>
# include <string.h>
# include <stdlib.h>

const long int MAXBUFF=800100;
const long int MAXN=100000;

long int pare[MAXN+1],impare[MAXN+1],nrp,nri,n;

void citire()
{
FILE *f=fopen("pairs.in","r");
fscanf(f,"%ld",&n);
char buffer[MAXBUFF],*p;
fread(buffer,1,MAXBUFF-2,f);
p=strtok(buffer," \n");
long int i,x;
for (i=1;i<=n;i++)
	{
	x=atoi(p);
	if (x%2==0) pare[++nrp]=x;
	else impare[++nri]=x;
	p=strtok(NULL," \n");
	}
fclose(f);
}

long long int calculeaza()
{
long long int sol=0;
long int i,j,a,b,r;
for (i=1;i<=nrp;i++)
	for (j=1;j<=nri;j++)
		{
		if (pare[i]>impare[j])
			{
			a=pare[i];
			b=impare[j];
			}
		else
			{
			a=impare[j];
			b=pare[i];
			}
		do
			{
			r=a%b;
			a=b;
			b=r;
			}
		while (b);
		if (a==1) sol++;
		}
for (i=1;i<=nri;i++)
	for (j=i+1;j<=nri;j++)
		{
		if (impare[i]>impare[j])
			{
			a=impare[i];
			b=impare[j];
			}
		else
			{
			a=impare[j];
			b=impare[i];
			}
		do
			{
			r=a%b;
			a=b;
			b=r;
			}
		while (b);
		if (a==1) sol++;
		}
return sol;
}

void scrie(long long int sol)
{
FILE *g=fopen("pairs.out","w");
fprintf(g,"%lld\n",sol);
fcloseall();
}

int main()
{
long long int sol;
citire();
sol=calculeaza();
scrie(sol);
return 0;
}