Cod sursa(job #801547)

Utilizator GrimpowRadu Andrei Grimpow Data 24 octombrie 2012 17:58:58
Problema Semne Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<fstream>
#include<time.h>
#include<stdlib.h>
using namespace std;

int main()
{
	long s,sol;
	int n,a[50001],Plus[50001],Minus[50001],plusx,minusx,parte[50001],Randomz,i;
	ifstream f("semne.in");
	ofstream g("semne.out");
	srand(time(0));
	f>>n>>s;
	plusx=minusx=0;
	sol=0;
	for(i=0;i<n;++i)
	{
		f>>a[i];
		parte[i]=rand()%2;
		if(parte[i])//Plus
		{
			Plus[plusx]=i;
			plusx++;
			sol+=a[i];
		}
		else //Minus
		{
			Minus[minusx]=i;
			minusx++;
			sol-=a[i];
		}
	}
	f.close();
	while(s!=sol)
	{
		if(sol<s)
		{
			plusx++;
			Randomz=rand()%minusx+1;
			Plus[plusx]=Minus[Randomz];
			sol+=2*a[Plus[plusx]];
			Minus[Randomz]=Minus[minusx];
			minusx--;
			parte[Plus[plusx]]=1;
		}
		else
		{
			minusx++;
			Randomz=rand()%plusx+1;
			Minus[minusx]=Plus[Randomz];
			sol-=2*a[Minus[minusx]];
			Plus[Randomz]=Plus[plusx];
			plusx--;
			parte[Minus[minusx]]=0;
		}
	}
	for(i=0;i<n;++i)
		if(parte[i])
			g<<'+';
		else g<<'-';
	g.close();
	return 0;
}