Cod sursa(job #294484)

Utilizator bog29Antohi Bogdan bog29 Data 2 aprilie 2009 16:10:20
Problema Elimin Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include<fstream.h>
ifstream in("elimin.in");
ofstream out("elimin.out");
int rows[3650],columns[3650],m,n,r,c,mat[3650][3650],x,y,min;
int suma()
{	int i,j,s=0;
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			s=s+mat[i][j];
	return s;	
}		
void scoate2()
{	int i,j;
	min=100000;
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			if((rows[i]+columns[j]-mat[i][j]<min)&&(rows[i]!=-1)&&(columns[j]!=-1))
			{	min=rows[i]+columns[j]-mat[i][j];x=i;y=j;}
	rows[x]=-1;columns[y]=-1;	
	for(i=1;i<=m;i++)mat[x][i]=0;
	for(i=1;i<=n;i++)mat[i][y]=0;
	r--;c--;		
}		
void scoater()
{	int i,min;
	min=100000;
	for(i=1;i<=n;i++)
		if((rows[i]!=-1)&&(rows[i]<min))
		{	min=rows[i];x=i;}
	rows[x]=-1;
	for(i=1;i<=m;i++)mat[x][i]=0;
	r--;
}
void scoatec()
{	int i,min=10000;
	for(i=1;i<=m;i++)
		if((columns[i]!=-1)&&(columns[i]>min))
		{	min=columns[i];y=i;}
	columns[i]=-1;
	for(i=1;i<=n;i++)mat[i][y]=0;
	c--;
}	
int main()
{	int i,j;
	in>>n>>m>>r>>c;
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
		{	in>>mat[i][j];
			rows[i]=rows[i]+mat[i][j];
			columns[j]=columns[j]+mat[i][j];
		}
	while((c>0)&&(r>0))scoate2();
	if(c==0)
		for(i=1;i<=r;i++)scoater();
	if(r==0)
		for(i=1;i<=c;i++)scoatec();
	/*for(i=1;i<=n;i++)
	{	for(j=1;j<=m;j++)out<<mat[i][j]<<" ";
		out<<"\n";
	}*/
	out<<suma();
	out.close();
	return 0;
}