Cod sursa(job #480863)

Utilizator andrei.dAndrei Diaconeasa andrei.d Data 29 august 2010 22:03:08
Problema Eprubeta Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.73 kb
#include <cstdio>


#define file_in "eprubeta.in"
#define file_out "eprubeta.out"

#define nmax 2010

int n,m,a,z,b;
int mat[nmax][nmax];


void adfile(void){
	
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%d %d %d %d %d", &n, &m, &z, &a, &b);
	
	return ;
}

#define swap(a,b) ((a)^=(b)^=(a)^=(b))

#define mod (1<<32)

void solve(void){
	
	int tip,x,y,k,i,j;
	//genereaza matricea
	
	for (i=0;i<n;++i)
		  for (j=0;j<n;++j)
			   mat[i][j]=((a+i)*(b+j)/4)%z;
	
	/*for (i=0;i<n;++i)
    {
	      for (j=0;j<n;++j)
               printf("%d ", mat[i][j]);
		  printf("\n");
    }*/
	for (i=0;i<m;++i)
	{
		scanf("%d %d %d", &tip,&x,&y);
		if (tip==2)
		{
			int suma=0;
			for (j=x;j<=y;++j)
				 for (k=x;k<=y;++k)
					  suma+=mat[j][k];
			printf("%d\n", suma);
		}
		else
		{
			int d=b-a+1;   
  
            for (j=0;j<d/2;++j) {
		        for (k=0;k<d;++k)   
                {
					int aux;
					aux=mat[a+j][a+k];
					mat[j+a][a+k]=mat[b-j][b-k];
					mat[b-j][b-k]=aux;
				}
					//swap(mat[a+j][a+k],mat[b-j][b-k]);   
			}
            if (d%2==1)    
            {
				for (j=0;j<d/2;++j)   
                {
					int aux;
					aux=mat[a+d/2][a+j];
					mat[a+d/2][a+j]=mat[a+d/2][b-j];
					mat[a+d/2][b-j]=aux;
					//swap(mat[a+d/2][a+j],mat[a+d/2][b-j]);  
				}					
			}
		}
		
	}

	/*for (i=0;i<n;++i)
    {
	      for (j=0;j<n;++j)
               printf("%d ", mat[i][j]);
		  printf("\n");
    }*/
		
	int res=0;
	for (i=0;i<n;++i) {
		int suma=0;
		for (j=0;j<n;++j)
			suma+=mat[i][j];
		res+=suma*suma*(i+1);
		//res&=(mod-1);
	}

	printf("%d\n", res);


}

int main(){
	
	adfile();
	solve();
	
	return 0;
	
}