Cod sursa(job #480853)

Utilizator andrei.dAndrei Diaconeasa andrei.d Data 29 august 2010 21:49:43
Problema Eprubeta Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <cstdio>
#include <algorithm>

using namespace std;

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

#define nmax 2010

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

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 mod (1<<32)

void solve(void){
	
	int tip,x,y,k;
	//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)   
                    swap(mat[a+j][a+k],mat[b-j][b-k]);   
            if (d%2==1)    
                for (j=0;j<d/2;++j)   
                    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;
	
}