Cod sursa(job #117818)

Utilizator savimSerban Andrei Stan savim Data 22 decembrie 2007 13:09:57
Problema Economie Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <stdio.h>
int main()
{
	int m,i,j,k,n;
	int a[1001],b[1001],c[1001];

	freopen("economie.in","r",stdin);
	freopen("economie.out","w",stdout);

	scanf("%d",&n);
	for (i=1; i<=n; i++)
		scanf("%d",&a[i]);

	for (i=1; i<=n-1; i++)
		for (j=i+1; j<=n; j++)
		if (a[i]>a[j])
		{
			k=a[i];
			a[i]=a[j];
			a[j]=k;
		}
	
    m=1;b[m]=a[1];c[m]=a[1];
	for (i=2; i<=n; i++)
	{
		int gas=0;
		for (j=1; j<=m; j++)
			if (a[i]%b[j]==0)
			{
				gas=1;
				break;
			}
		if (!gas)
		{
			m++;
			b[m]=a[i];
			c[m]=a[i];
		}
	}

    for (i=2; i<=m; i++)
        for (j=1; j<=i-1; j++)
        {
			k=b[i]-b[j];
            int gas=0,p=1,q=j;
			if (k==b[1] || b[m]==k) gas=1;
            while (p+1<q)
            {
                  int r=(p+q)/2;
                  if (b[r]==k) gas=1;
                  if (b[r]<k) p=r;
                  else q=r;    
                  if (gas) break;
            }
            if (gas) c[i]=0;
        }
   	
   	int nr=0;
    for (i=1; i<=m; i++)
   	if (c[i]!=0) nr++;

    printf("%d\n",nr);
	for (i=1; i<=m; i++)
	    if (c[i]!=0) printf("%d\n",c[i]);

	return 0;
}