Pagini recente » Cod sursa (job #2365131) | Cod sursa (job #788044) | Cod sursa (job #1409109) | Cod sursa (job #1562736) | Cod sursa (job #421801)
Cod sursa(job #421801)
#include<fstream>
#include<algorithm>
#include<queue>
#define inf "economie.in"
#define outf "economie.out"
#define VMax 50001
#define NMax 1010
using namespace std;
fstream f(inf,ios::in),g(outf,ios::out);
int N;
int v[NMax];
int uz[NMax]; // uz[i]=1 daca folosim v[i]
int s[VMax]; //s[i]=1 daca se poate forma suma i
int s1[VMax];
queue<int> q;
void read()
{
f>>N;
for(int i=1; i<=N; i++) f>>v[i];
}
void solve()
{
int nr=0;
sort( v+1, v+N+1 );
for(int i=1; i<=N; i++)
{
s1[ v[i] ] = 1 ;
for( int j=1; j<VMax; j++ )
if( (s1[j]||s[j]) && j+v[i]<VMax && !s1[ j+v[i] ] && !s[ j+v[i] ] ) s1[ j+v[i] ] = 1;
for( int j=1; j<=N; j++ )
if( s1[ v[j] ] && !s[ v[j] ] ) { uz[i]=1; break; }
for( int j=1; j<VMax; j++ )
if( s1[j] )
{
if( !s[j] ) s[j]=1, s1[j]=0;
else s1[j]=0;
}
}
for( int i=1; i<=N; i++ )
if( uz[i] ) q.push( i ), nr++ ;
g<<nr<<"\n";
while( !q.empty() )
{
g<< q.front() <<"\n";
q.pop();
}
}
int main()
{
read();
solve();
f.close();
g.close();
return 0;
}