Cod sursa(job #2108030)

Utilizator andreicoman299Coman Andrei andreicoman299 Data 17 ianuarie 2018 20:58:48
Problema Semne Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <bits/stdc++.h>
#define MAXN 50000

long long v[1 + MAXN];
int f[1 + MAXN];
int main(){
    FILE*fi,*fo;
    fi = fopen("semne.in","r");
    fo = fopen("semne.out","w");

    int N;
    long long s;
    fscanf(fi,"%d%lld", &N, &s);
    for(int i = 1; i <= N; i++)
        fscanf(fi,"%lld", &v[i]);
    long long sum = 0;
    for(int i = 1; i <= N; i++){
        f[i] = 1;
        sum += v[i];
    }

    int p = N, n = 0;
    srand(time(NULL));
    while(sum != s){
        int i, j = 1, con = 0;
        if(sum > s){
            i = 1 + rand() % p;
            p--;
            n++;
            while(con < i){
                if(f[j] == 1)
                    con++;
                j++;
            }
        }
        else{
            i = 1 + rand() % n;
            p++;
            n--;
            while(con < i){
                if(f[j] == -1)
                    con++;
                j++;
            }
        }
        j--;
        //i = 1 + rand() % N;
        sum -= f[j] * v[j];
        f[j] = -f[j];
        sum += f[j] * v[j];
    }
    for(int i = 1; i <= N; i++)
        if(f[i] == 1) fprintf(fo,"+");
        else fprintf(fo,"-");

    return 0;
}