Pagini recente » Cod sursa (job #1863142) | Cod sursa (job #2564408) | Cod sursa (job #1439624) | Cod sursa (job #2385613) | Cod sursa (job #480855)
Cod sursa(job #480855)
#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;
}