Pagini recente » Cod sursa (job #2511178) | Cod sursa (job #130511) | Cod sursa (job #277829) | Cod sursa (job #1676306) | Cod sursa (job #71303)
Cod sursa(job #71303)
using namespace std;
#define MAX_N 50005
#include <stdio.h>
#include <fstream>
#define Vmax 5000005
int n,i;
long long s,dif,val=-1,sp;
long long a[MAX_N];
char p[MAX_N],semn;
int pls[Vmax],mns[Vmax];
int main()
{
FILE *fin=fopen("semne.in","r"),
*fout=fopen("semne.out","w");
fscanf(fin,"%d %lld\n",&n,&s);
memset(p,0,sizeof(p));
for (i=1; i<=n; i++)
{
fscanf(fin,"%lld",a+i);
sp+=a[i]; p[i]=1;
pls[a[i]]++;
}
int c;
while (sp!=s)
{
c=rand() % n ;
p[c]^=1;
if(p[c])
{
sp+=(a[c]<<1);
pls[a[c]]++;
mns[a[c]]--;
}
else
{
sp-=(a[c]<<1);
pls[a[c]]--;
mns[a[c]]++;
}
dif=s-sp;
if(dif%2==0)
{
dif/=2;
if(dif>0 && dif<=5000000 && mns[dif]>0)
{
val=dif;
semn=0;
break;
}
if(dif<0 && dif>=-5000000 && pls[-dif]>0)
{
val=-dif;
semn=1;
break;
}
}
}
for (i=1; i<=n; i++)
if(a[i] == val && p[i] == semn)
{
p[i]^=1;
val=-1;
i--;
}
else
if (p[i]==1) fprintf(fout,"+");
else fprintf(fout,"-");
fclose(fin); fclose(fout);
return 0;
}