Pagini recente » Cod sursa (job #885330) | Cod sursa (job #903820) | Cod sursa (job #1434880) | Cod sursa (job #654731) | Cod sursa (job #1950153)
#include <fstream>
#include <string>
#include <algorithm>
#include <time.h>
#include<cstring>
#include<stdlib.h>
using namespace std;
ifstream cin("semne.in");
ofstream cout("semne.out");
int v[50000], q,i,j,n,s;
string sol;
int aux[50000];
string getRandom(int n, int k){
long long sum=0;
int neg=0;
int poz=0;
for (int i=1; i<=k; ++i)
if (rand() % 2) {
sum+=v[i];
aux[i]=1;
++poz;
}
else {
sum-=v[i];
aux[i]=0;
++neg;
}
int nrit=0;
int r=0;
while (sum!=n) {
if (sum>n) {
if(poz!=0)
r=rand()%poz+1;
int cnt=0;
int pos=0;
for (int i=1; i<=k; ++i)
if (aux[i]==1) {
++cnt;
pos=i;
if (cnt==r) break;
}
sum-=v[pos]*(long long)2;
aux[pos]=0;
--poz;
++neg;
}
else if(sum<n){
if(neg!=0)
r=rand()%neg+1;
int cnt=0;
int pos=0;
for (int i=1; i<=k; ++i)
if (aux[i]==0) {
++cnt;
pos=i;
if (cnt==r) break;
}
sum+=v[pos]*(long long)2;
aux[pos]=1;
++poz;
--neg;
}
else break;
++nrit;
}
string sol="";
if (sum!=n) return sol;
for (int i=1; i<=k; ++i)
if (aux[i]==0) sol+='-';
else sol+='+';
return sol;
}
int main()
{
srand(time(NULL));
cin>>n>>s;
for(i=1;i<=n;++i) cin>>v[i];
string sol=getRandom(s,n);
cout<<sol;
return 0;
}