Pagini recente » Cod sursa (job #2585783) | Cod sursa (job #2963798) | Cod sursa (job #1292138) | Cod sursa (job #2808317) | Cod sursa (job #55948)
Cod sursa(job #55948)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <iostream>
#include <fstream>
using namespace std;
//FILE *in = fopen("semne.in","r"), *out = fopen("semne.out","w");
ifstream in ("semne.in");
ofstream out("semne.out");
int a[50000];
int n;
long long s = 0;
int b[5000000] = {0};
void read()
{
in >> n >> s;
for ( int i = 0; i < n; ++i )
{
in >> a[i];
//cout<<a[i]<<" ";
}
cout<<endl;
}
long long sum()
{
unsigned long long sm = 0;
for ( int i = 0; i < n; ++i )
if ( b[a[i]] == 0 )
sm -= a[i];
else
sm += a[i];
return sm;
}
int main()
{
read();
srand((unsigned)time(0));
long long sol = 0;
if (s>=0)
for ( int i = 0; i < n; ++i )
{
sol += a[i];
b[a[i]]=1;
}
else
for ( int i = 0; i < n; ++i )
{
sol -= a[i];
b[a[i]]=0;
}
//cout<<sol<<endl<<"******"<<endl;
while ( sol != s )
{
int pp=rand();
//cout<<pp<<endl;
int t = pp % n;
//cout<<"t="<<t<<endl;
if ( sol < s && b[a[t]] == 0)
{
b[a[t]] = 1;
//cout<<-a[t]<<" am "<<sol<<endl;
sol += (2*a[t]);//sum();
//cout<<a[t]<<" am "<<sol<<endl;
}
else if ( sol > s && b[a[t]] == 1 )
{
b[a[t]] = 0;
//cout<<a[t]<<" am "<<sol<<endl;
sol -=(2*a[t]); //sum();
//cout<<-a[t]<<" am "<<sol<<endl;
}
//sol=sum();
}
cout<<"s="<<s<<endl;
cout<<"sol="<<sol<<endl;
for ( int i = 0; i < n; ++i )
if ( b[a[i]] == 0 )
{
out << "-";
cout<<-a[i];
}
else
{
out << "+";
cout<<"+"<<a[i];
}
out << endl;
return 0;
}