Cod sursa(job #338625)

Utilizator darrenRares Buhai darren Data 6 august 2009 12:41:40
Problema Triplete Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<fstream.h>

int n,m;
long x[250][2000];
long y[250][9];
long f=0;

void read();
void srch();
void out();

int main()
{
	read();
	srch();
	out();
	return 0;
}

void read()
{
	ifstream fin("fold.in");
	fin>>n>>m;

	int i,j,z1;
	for (i=0;i<n;i++)
	{
		z1=0;
		for (j=0;j<m;j++)
		{
		fin>>x[i][j];
		if (x[i][j]==true)
		y[i][z1]|=1<<j;
		if (j%32==0 && j!=0)
		z1++;
		}

	}
	fin.close();
}

void srch()
{
	int i,j,i2,p,ax,ax2,k;
	ax2=n/32;
	for (i=0;i<n-1;i++)
		for (j=0;j<m-1;j++)
		{
			if (j==0 && i==0)
			{
			}
			else
			if (j==0)
			{
			ax=(i-1)/32;
			k=(m-2)%32;
			y[i-1][ax]&=~(1<<k);
			}
			else
			{
			ax=i/32;
			k=(j-1)%32;
			y[i][ax]&=~(1<<k);
			}

			if (x[i][j])
				for (i2=i+1;i2<n;i2++)
				if (x[i2][j])
				{
					ax=(i+1)/32;
					for (p=ax;p<=ax2;p++)
					{
						k=y[i][p] & y[i2][p];
						k&=k-1;
						while (k)
						{
							k&=k-1;
							f++;
						}
					}
				}
		}
}

void out()
{
	ofstream fout("fold.out");
	fout<<f;
	fout.close();
}