Project Euler Problem 93

#define put(now) if(now > 0 && now < N && floor(now) == now){list[(int)now] = (int)now; }
int search(double x[4],int N){
	int *list = new int[N];
	fill(list, list+N, 0);
	int ans = 0, a=0;

	for(int i=0;i<4;i++)
	for(int j=0;j<4;j++)
	for(int k=0;k<4;k++){
		if(i == j) continue;
		double now1 = calc(x[i],x[j],k);
		for(int l=0;l<4;l++)
		for(int m=0;m<4;m++)
		for(int n=0;n<4;n++){
			if(l==m || i==l || i==m || j==l || j==m) continue;
			double now2 = calc(x[l],x[m],n); // l&m
			double now3 = calc(now1,x[l],n); // (i&j)&l
			double now4 = calc(x[l],now1,n); // l&(i&j)
			for(int o=0;o<4;o++){
					put(calc(now1, now2, o)); // (i&j)&(l&m)
					put(calc(now3, x[m], o)); // ((i&j)&l)&m
					put(calc(x[m], now3, o)); // m&((i&j)&l)
					put(calc(now4, x[m], o)); // (l&(i&j))&m
					put(calc(x[m], now4, o)); // m&(l&(i&j))
			}
		}
	}

	while(++ans<N)
		if(list[ans] != ans)
			break;

	delete[] list;
	return ans-1;
}

int main(){
	uLLint N = 5*4*3*2*64+1;
	int big = 0;
	int X = 10;
	for(double i=1;i<X;i++)
	for(double j=i+1;j<X;j++)
	for(double k=j+1;k<X;k++)
	for(double l=k+1;l<X;l++){
		double x[4] = {i,j,k,l};
		int ans = search(x, N);
		if(big < ans){
			big = ans;
			printf("[%.0f %.0f %.0f %.0f] %d\n",i,j,k,l, ans);
		}
	}
	cout << big << endl;
	return 0;
}