Cod sursa(job #1167812)

Utilizator usermeBogdan Cretu userme Data 5 aprilie 2014 22:39:32
Problema Semne Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <cstdio>
#include <ctime>
#include <cstdlib>

using namespace std;

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

char semn[50001];

int v[50001];

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