Cod sursa(job #1167795)

Utilizator usermeBogdan Cretu userme Data 5 aprilie 2014 22:25:45
Problema Semne Scor 65
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <cstdio>
#include <ctime>
#include <cstdlib>

using namespace std;

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

int semn[50001];

int v[50001];

int main(){
    int n,sum,s=0,k;
    fscanf(f,"%d%d",&n,&sum);
    k=n/2;
    for ( int i=1;i<=k;++i ){
        semn[i]=1;
        fscanf(f,"%d",&v[i]);
        s+=v[i];
    }
    ++k;
    for ( int i=k;i<=n;++i ){
        semn[i]=-1;
        fscanf(f,"%d",&v[i]);
        s-=v[i];
    }
    srand(time(NULL));
    while ( s!=sum ){
        if ( s>sum ){
            int x=rand()%n+1;
            while  ( semn[x]==-1 )
                ++x;
            if ( x>n ){
                x=1;
                while ( semn[x]==-1 )
                    ++x;
            }
            s-=2*v[x];
            semn[x]=-1;
            continue;
        }
        int x=rand()%n+1;
        while  ( semn[x]==1 )
            ++x;
        if ( x>n ){
            x=1;
            while ( semn[x]==1 )
                ++x;
        }
        s+=2*v[x];
        semn[x]=1;
    }
    for ( int i=1;i<=n;++i ){
        if ( semn[i]==1 )
            fprintf(h,"+");
        else fprintf(h,"-");
    }
    return 0;
}