Cod:
1. program pascal;
2. var f,g:text; t:array[1..50000] of byte; x,p:array[1..1000] of longint;
3. max,i,k,j,n,aux,c:longint;
4. procedure citire;
5. begin
6. assign(f,'economie.in'); reset(f);
7. assign(g,'economie.out'); rewrite(g);
8. readln(f,n);
9.
10. for i:=1 to n do readln(f,x[i]);
11. max:=50000;
12. for i:=1 to max do t[i]:=1;
13. close(f);
14. end;
15.
16. procedure sort(s,d:longint);
17. var a,b,aux,ia:longint;
18. begin
19. a:=s; b:=d;
20. repeat
21. while x[a]<x[b] do b:=b-1;
22. aux:=x[a]; x[a]:=x[b]; x[b]:=aux; ia:=1; a:=a+1;
23. if a<b then
24. begin
25. while x[a]<x[b] do a:=a+1;
26. if a<>b then
27. begin
28. aux:=x[a]; x[a]:=x[b]; x[b]:=aux; ia:=0; b:=b-1;
29. end;
30. end;
31. until b<=a;
32. if a-ia>s then sort(s,a-ia);
33. if a-ia+1<d then sort(a-ia+1,d);
34. end;
35.
36. procedure sorte;
37. begin
38. k:=0;
39. for j:=1 to n do
40. begin
41. if t[x[j]]=1 then
42. begin
43. k:=k+1; p[k]:=x[j]; t[x[j]]:=0;
44. end;
45. for i:=1 to max do
46. if t[i]=0 then
47. begin
48. c:=i+x[j];
49. if (c<=max) then t[c]:=0;
50. end;
51. end;
52. end;
53.
54. procedure afisare;
55. begin
56. writeln(g,k);
57. for i:=1 to k do writeln(g,p[i]);
58. close(g);
59. end;
60.
61. begin
62. citire;
63. sort(1,n);
64. sorte;
65. afisare;
66. end.

iti multumesc tare mult!
