标签:represent tom other 矩阵 chmod msu php col The
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 1162 Accepted Submission(s): 522
for (int i = 0; ; ++i) {
for (int j = 0; j <= i; ++j) {
M[j][i - j] = A[cursor];
cursor = (cursor + 1) % L;
}
}
解析 矩阵是无限大的所以右下角没有被赋值的地方是不受影响的QAQ 长度为偶数循环矩阵是 2L*2L 所以直接按照2L算就是了 二位前缀和预处理一下 数一下完事了
AC代码
#include <bits/stdc++.h> #define pb push_back #define mp make_pair #define fi first #define se second #define all(a) (a).begin(), (a).end() #define fillchar(a, x) memset(a, x, sizeof(a)) #define huan printf("\n"); #define debug(a,b) cout<<a<<" "<<b<<" "; using namespace std; typedef long long ll; const ll maxn=1e2+10,inf=0x3f3f3f3f; const ll mod=1e9+7; ll a[maxn],g[maxn][maxn],n; ll sum[maxn][maxn]; void init() { int cnt=0; for(int i=0;i<4*n;++i) { for(int j=0;j<=i;++j) { g[j][i-j]=a[cnt]; cnt=(cnt+1)%n; } } sum[0][0]=g[0][0]; for(int i=0;i<2*n;i++) { for(int j=0;j<2*n;j++) { if(i>0&&j>0)sum[i][j]=g[i][j]+sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]; if(i==0&&j>0)sum[i][j]=g[i][j]+sum[i][j-1]; if(j==0&&i>0)sum[i][j]=g[i][j]+sum[i-1][j]; } } } ll solve(int x,int y) { ll ans=0; ll xx=x/n; ll yy=y/n; ll yux=x%n; ll yuy=y%n; ans+=xx*yy*sum[n-1][n-1]; ans+=yy*sum[yux][n-1]; ans+=xx*sum[n-1][yuy]; ans+=sum[yux][yuy]; return ans; } int main() { int t,q; cin>>t; while(t--) { cin>>n; for(int i=0;i<n;i++) cin>>a[i]; init();n=n*2; cin>>q; while(q--) { int x1,x2,y1,y2; cin>>x1>>y1>>x2>>y2; //cout<<solve(x1,y1)<<endl; cout<<solve(x2,y2)-solve(x1-1,y2)-solve(x2,y1-1)+solve(x1-1,y1-1)<<endl; } } return 0; }
标签:represent tom other 矩阵 chmod msu php col The
原文地址:https://www.cnblogs.com/stranger-/p/9415806.html