Cod sursa(job #2199526)

Utilizator Lazar_LaurentiuLazar Laurentiu Lazar_Laurentiu Data 28 aprilie 2018 09:19:09
Problema Semne Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <random>
#include <ctime>
#define MAX 50010

using namespace std;
typedef long long ll;

ll n,s,nr,sf,sz1,sz2;
ll a[MAX],v1[MAX],v2[MAX];
bool sm[MAX];

int main()
{
    ifstream f ("semne.in");
    ofstream g ("semne.out");
    f>>n>>sf;
    for(ll i=1;i<=n;i++){
      f>>a[i];
      s+=a[i],sm[i]=1,v1[sz1++]=i;
    }
    srand(time(0));
    while(s!=sf){
      nr=rand();
      if(s<sf){
        nr=nr%sz2;
        s+=a[v2[nr]]*2,sm[v2[nr]]=1,v1[sz1++]=v2[nr],v2[nr]=v2[--sz2];
      } else {
        nr=nr%sz1;
        s-=a[v1[nr]]*2,sm[v1[nr]]=0,v2[sz2++]=v1[nr],v1[nr]=v1[--sz1];
      }
    }
    for(ll i=1;i<=n;i++)
      if(sm[i]==0)g<<'-';
      else g<<'+';
    g<<'\n';
    f.close ();
    g.close ();
    return 0;
}