Cod sursa(job #735401)

Utilizator harababurelPuscas Sergiu harababurel Data 16 aprilie 2012 13:19:02
Problema Semne Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main() {
	ifstream f("semne.in");
	ofstream g("semne.out");
	
	srand(time(NULL));
	
	int n, v[50005], i;
	long long sbun, s=0;
	char semn[50005];
	
	f>>n>>sbun;
	for(i=1; i<=n; i++) {
		f>>v[i];
		s+=v[i];
		semn[i]='+';
	}
	
	
	while(s!=sbun) { 
		if(s>sbun) { 	//trebuie sa scad un numar -> pun "-" la unu cu "+"
			i=rand()%n +1;
			while(semn[i]=='-' && i<n) i++; //i=rand()%n +1;
			if(semn[i]=='-' && i==n) {
				i=1;
				while(semn[i]=='-') i++;
			}
			
			//am un v[i] cu "+";
			semn[i]='-';
			s-=2*v[i];
		}
		
		if(s<sbun) { 	//trebuie sa adun un numar -> pun "+" la unu cu "-"
			i=rand()%n +1;
			while(semn[i]=='+' && i<n) i++; //i=rand()%n +1;
			if(semn[i]=='+' && i==n) {
				i=1; 
				while(semn[i]=='+') i++;
			}
			
			//am un v[i] cu "-";
			semn[i]='+';
			s+=2*v[i];
		}
	}
	
	for(i=1; i<=n; i++) g<<semn[i];
	
	g<<"\n";
	
	f.close();
	g.close();
	return 0;
}