Cod sursa(job #480866)

Utilizator andrei.dAndrei Diaconeasa andrei.d Data 29 august 2010 22:10:33
Problema Eprubeta Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 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];

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 ;
}


void solve(void){
	
	for (int i=0;i<n;++i)
		for (int j=0;j<n;++j)
			mat[i][j]=((i+a)*(j+b)/4)%z;


	for (int i=0;i<m;++i)
	{
		int tip,x,y;
		
		scanf("%d %d %d", &tip, &x, &y);
		if (tip==2) 
		{
			int sum=0;
			for (int j=x;j<=y;++j)
				for (int k=x;k<=y;++k)
					sum+=mat[j][k];
			printf("%d\n", sum); 
		} 
		else
		{
			int d=b-a+1;

			for (int j=0;j<d/2;++j) 
			{
				for (int k=0;k<d;++k)
					swap(mat[x+j][x+k],mat[y-j][y-k]);
			}

			if (d&1) 
			{
				for (int j=0;j<d/2;++j)
					swap(mat[x+d/2][x+j],mat[x+d/2][y-j]);
			}
		}
	}

    int rez=0;
	for (int i=0;i<n;++i)
	{
		int sum=0;
		for (int j=0;j<n;++j)
			sum+=mat[i][j];
		rez+= sum*sum*(i+1);
	}

	printf("%d\n", rez);
}


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