HeHe
n的矩阵
然后m次查询,每次x行乘以y列给ans
从2个查询开始,x,y进行(i+ans)%n的变换
最后输出所有查询ans的和
然后m次查询,每次x行乘以y列给ans
从2个查询开始,x,y进行(i+ans)%n的变换
最后输出所有查询ans的和
n3 n4 n5
n2 n3 n4
n1 n2 n3
1 1 的结果是 n3*n3 + n2*n4 + n1*n5 大家可以看到i+j之和为定值,于是就可以预处理啦
#include <iostream>
#include <cstdio>
#include <climits>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <algorithm>
#define esp 1e-6
#define inf 0x0f0f0f0f
#define LL long long
using namespace std;
int x,y,i,j,n,m,a[3000],b[2010][2010],ans;
long long int sum=0;
int main()
{
while(scanf("%d",&n)!=EOF)
{
memset(b,0,sizeof(b));
for(i=0;i<2*n-1;i++) scanf("%d",&a[i]);
for(i=0;i<=2*n-1;i++)
{
b[i][2*n-2]=a[i]*a[2*n-2];
for(j=2*n-1;j>=0;j--)
b[i][j]=b[i-1][j+1]+a[i]*a[j];
}
scanf("%d",&m);
sum=0;
ans=0;
for(i=0;i<m;i++)
{
scanf("%d%d",&x,&y);
x=(x+ans)%n;
y =(y+ans)%n;
ans=b[2*n-x-2][y]-b[n-2-x][n+y];
sum+=ans;
}
printf("%I64d\n",sum);
}
return 0;
}