Cod sursa(job #71672)

Utilizator info_arrandrei gigea info_arr Data 11 iulie 2007 10:40:02
Problema Semne Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
using namespace std;

#include <cstdio>
#include <time.h>
#include <cstdlib>
#include <fstream>
  
  #define MAX_N 50005
  #define ll long long

int N,i;
ll a[MAX_N],S,Sc;
int tp[MAX_N];

int main()
{
    freopen("semne.in","r",stdin);
    freopen("semne.out","w",stdout);
    
    scanf("%d %lld",&N,&S);
    
    for (i=1; i<=N; i++) scanf("%lld",a+i);
    
    memset(tp,0,sizeof(tp)); Sc=0;

    for (i=N; i>=N/3; i--)
     if (Sc<S) 
      { 
        Sc+=a[i]; 
        tp[i]=1; 
      }
     else Sc-=a[i];

    int c=N/3,d=0;  
    
    for (i=1; i<=c-1; i++) Sc-=a[i];  
    srand(unsigned(time(NULL)));
    
    while (Sc!=S)  
     {
        d=rand() % c;
        if (Sc<S && !tp[d])
         {
           Sc+=(a[d]<<1);
           tp[d]=1;
         }
        if (Sc>S && tp[d])   
         {
           Sc-=(a[d]<<1);
           tp[d]=0;
         }
     }
    for (i=1; i<=N; i++)
     if (tp[i]) printf("+");
      else printf("-");
    
    return 0;
}