Cod sursa(job #82903)

Utilizator DastasIonescu Vlad Dastas Data 9 septembrie 2007 15:02:28
Problema Semne Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <algorithm>

#define maxn 50000
#define fout out

FILE *in = fopen("semne.in","r"), *out = fopen("semne.out","w");

int a[maxn];
char semn[maxn];

int n;
long long s;
long long sol = 0;

void read()
{
    fscanf(in, "%d %lld\n", &n, &s);

    int tt = 0;
    char buf[1024];
    while ( fread(buf, 1, 1024, in) )
    {
        int l = strlen(buf);
        for ( int i = 0; i < l; ++i )
            if ( buf[i] <= '9' && buf[i] >= '0' )
                a[tt] = a[tt]*10 + (buf[i] - '0');
            else if ( buf[i] == ' ' )
            {
                int t = rand() & 1;
                if ( t == 0 )
                {
                    sol += a[tt];
                    semn[tt] = 1;
                }
                else
                {
                    sol -= a[tt];
                    semn[tt] = -1;
                }
                ++tt;
            }
    }
  //  std::sort(a, a+n);
}

int main()
{
    srand(time(0));
    read();


    while ( sol != s )
    {
        int q = rand();
        if ( q >= n )
            q %= n;

        if ( sol < s && semn[q] == -1 )
            sol += (a[q]<<1), semn[q] = 1;
        else if ( sol > s && semn[q] == 1 )
            sol += (a[q]<<1) * (semn[q] = -1);
    }

    for ( int i = 0; i < n; ++i )
        if ( semn[i] == -1 )
            fprintf(fout, "-");
        else
            fprintf(fout, "+");
//    fputs(lol, out);

	return 0;
}