Pagini recente » Cod sursa (job #2721655) | Cod sursa (job #694058) | Cod sursa (job #1823644) | Cod sursa (job #120199) | Cod sursa (job #238623)
Cod sursa(job #238623)
#include<stdio.h>
#define InFile "economie.in"
#define OutFile "economie.out"
#define Nmax 50001
int n;
long v[Nmax],r[Nmax],s;
FILE *fout=freopen(OutFile,"w",stdout);
int Divide(int p,int q)
{long x=v[p];
int st=p,dr=q;
while(st<dr)
{
while(st<dr&&v[dr]>=x) dr--;
v[st]=v[dr];
while(st<dr&&v[st]<=x) st++;
v[dr]=v[st];
}
v[st]=x;
return st;
}
void Qsort(int p,int q)
{
int m=Divide(p,q);
if(m-1>p) Qsort(p,m-1);
if(m+1<q) Qsort(m+1,q);
}
int cauta(int prim,int ultim,long x)
{
if(prim>ultim) return 0;
int m=(prim+ultim)/2;
if(r[m]==x) return 1;
if(x>r[m]) return cauta(prim,m-1,x);
return cauta(m+1,ultim,x);
}
void out()
{
int i,l=0,j,ok;
for(i=1;i<=n;i++)
if(v[i])
{r[++l]=v[i]; s+=v[i];
for(j=i+1;j<=n;j++)
if(v[j])
{
if(v[j]%v[i]==0) v[j]=0;
if(s==v[j]) v[j]=0;
if(s>v[j])
{ok=cauta(1,l,s-v[j]);
if(ok) v[j]=0;
}
}
v[i]=0;
}
printf("%d\n",l);
for(i=1;i<=l;i++) printf("%ld\n",r[i]);
}
int main()
{
FILE *fin=freopen(InFile,"r",stdin);
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%ld",&v[i]);
Qsort(1,n);
if(v[1]==1) printf("1\n1");
else out();
fclose(fin); fclose(fout);
return 0;
}