Pagini recente » Monitorul de evaluare | Istoria paginii runda/asdfghjkl | Istoria paginii runda/iuiui/clasament | Istoria paginii runda/best/clasament | Cod sursa (job #133791)
Cod sursa(job #133791)
#include <cstdio>
#include <algorithm>
#define MaxN 2010
using namespace std;
unsigned n, m, A, B, MOD;
unsigned a[MaxN][MaxN], buf[MaxN];
inline void schimba(unsigned *a, unsigned *b, unsigned n){
unsigned nr=n;
while (nr--)
swap(a[nr], b[nr]);
reverse(a, a+n);
reverse(b, b+n);
}
inline void rotate(unsigned x, unsigned y){
unsigned st=x, fn=y;
while (st<fn){
schimba(a[st]+x, a[fn]+x, y-x+1);
st++;
fn--;
}
}
inline void suma(unsigned x, unsigned y){
unsigned sum=0;
y++;
for (unsigned i=x; i<y; i++)
for (unsigned j=x; j<y; j++)
sum += a[i][j];
printf("%u\n", sum);
}
int main(){
freopen("eprubeta.in", "r", stdin);
freopen("eprubeta.out", "w", stdout);
scanf("%d %d %d %d %d\n", &n, &m, &MOD, &A, &B);
for (unsigned i=0; i<n; i++)
for (unsigned j=0; j<n; j++)
a[i][j] = ((i+A)*(j+B)/4)%MOD;
while (m--){
unsigned op, x, y;
scanf("%d %d %d", &op, &x, &y);
if (op==1) rotate(x, y); else suma(x, y);
}
unsigned rez=0;
for (unsigned i=0; i<n; i++){
unsigned sum=0;
for (unsigned j=0; j<n; j++)
sum += a[i][j];
rez += sum*sum*(i+1);
}
printf("%u\n", rez);
}