Cod sursa(job #607504)

Utilizator andunhillMacarescu Sebastian andunhill Data 12 august 2011 13:30:39
Problema Oite Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include<fstream>
#include<algorithm>
using namespace std;

ifstream f("oite.in");
ofstream g("oite.out");

int C,L;
int wool[1030];
char sir[1030];
char *p = sir;

void read(int &x)
{	x = 0;
	while(*p >= '0' && *p <= '9')
		x = x * 10 + *p - '0' , p++;
	if(*p == ' ') p++;
}

bool bin_search(int st,int dr,int val,int &nr)
{	int mid,poz,ok = 0;
	nr = 0;
	while(st <= dr && !ok)
	{	mid = (st + dr) / 2;
		if(val < wool[mid])
			dr = mid - 1;
		else if(val > wool[mid])
			st = mid + 1;
		else ok = 1;
	}
	if(ok == 0) return 0;
	nr = 1;
	for(int i = mid - 1; i >= 1; i--)
		if(wool[i] == val) nr++;
	for(int i = mid + 1; i <= C; i++)
		if(wool[i] == val) nr++;
	return 1;
}

int main()
{	int i,j,k,nr;
	long long nr_pos = 0;
	f.getline(sir,1030);
	read(C); read(L);
	f.getline(sir,1030); p = sir;
	for(i = 1; i <= C; i++)
		read(wool[i]);
	sort(wool + 1, wool + C + 1);
	for(i = 1; i <= C; i++)
		for(j = i + 1; j <= C; j++)
			for(k = j + 1; k <= C; k++)
				if(bin_search(k + 1,C,L - wool[i] - wool[j] - wool[k],nr))
					nr_pos += nr;
	g<<nr_pos;
	f.close();
	g.close();
	return 0;
}