Cod sursa(job #50889)

Utilizator cos_minBondane Cosmin cos_min Data 9 aprilie 2007 11:42:58
Problema Semne Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.64 kb
#include <stdio.h>
#include <fstream>
using namespace std;

#define in "semne.in"
#define out "semne.out"
#define dim 50001

bool Semn[dim];
long long A[dim], Stotal[dim];
int S, stotal = 0;
int N;

int main()
{
    srand(time(0)%666730);
    freopen(in,"r",stdin);
    freopen(out,"w",stdout);
    
    scanf("%d", &N );
    scanf("%lld", &S);
    
    Stotal[0] = 0;
    
    for ( int i = 1; i <= N; i++ )
    {
        scanf("%lld", &A[i]);
        stotal += A[i];
        Stotal[i] = Stotal[i-1] + A[i];
    }
    
    if ( stotal == S )
    {
         for ( int i = 1; i <= N; i++ )
             printf("+");
         
         return 0;
    }
    
    if ( stotal == -S )
    {
         for ( int i = 1; i <= N; i++ )
             printf("+");
         
         return 0; 
    }
        
    memset(Semn,0,sizeof(Semn) );
    int gasit = 0;
    int minus = 0;
    
    while ( gasit == 0 )
    {
          stotal = 0;
          for ( int i = 1; i <= N; i++ )
          {
              Semn[i] = rand()%2;
              if ( Semn[i] == 1 ) stotal += A[i];
              else                stotal -= A[i];
          }
          
          if ( stotal == S ) gasit = 1;
          if ( stotal == -S ) gasit = 1, minus = 1;
    }
    
    if ( minus == 0 )
    {
       for ( int i = 1; i <= N; i++ )
       {
           if ( Semn[i] == 1 ) printf("+");
           else                printf("-");
       }
    }
    else
    {
       for ( int i = 1; i <= N; i++ )
       {
           if ( Semn[i] == 1 ) printf("-");
           else                printf("+");
       }
        
    }
     
}