Pagini recente » Cod sursa (job #1133309) | Cod sursa (job #879594) | Cod sursa (job #992325) | Cod sursa (job #835982) | Cod sursa (job #1712455)
#include <stdio.h>
#include <stdlib.h>
long long min(long long a, long long b){
return a < b ? a : b;
}
long long p[5000001], m[5000001];
int main(){
long long n, s;
FILE*fi,*fo;
fi=fopen("semne.in","r");
fo=fopen("semne.out","w");
fscanf(fi,"%lld%lld", &n, &s);
int i;
long long sum=0;
for(i=1;i<=n/2;i++){
long long x;
fscanf(fi,"%lld", &x);
sum+=x;
p[x]++;
}
while(i<=n){
long long x;
fscanf(fi,"%lld", &x);
sum-=x;
m[x]++;
i++;
}
while(sum!=s){
if(sum>s){
long long tosrc=min(5000000, (sum-s)/2);
long long i, j;
i=j=tosrc;
while(p[i]==0 && p[j]==0){
if(i>0) i--;
if(j<5000000) j++;
}
if(p[i]>0){
p[i]--;
m[i]++;
sum=sum-2*i;
}
else{
p[j]--;
m[j]++;
sum=sum-2*j;
}
}
else{
long long tosrc=min(5000000, (s-sum)/2);
long long i, j;
i=j=tosrc;
while(m[i]==0 && m[j]==0){
if(i>0) i--;
if(j<5000000) j++;
}
if(m[i]>0){
m[i]--;
p[i]++;
sum=sum+2*i;
}
else{
m[j]--;
p[j]++;
sum=sum+2*j;
}
}
}
for(int i=1;i<=5000000;i++){
while(p[i]>0){
fprintf(fo,"+");
p[i]--;
}
while(m[i]>0){
fprintf(fo,"-");
m[i]--;
}
}
fclose(fi);
fclose(fo);
return 0;
}