Why TLE
查看原帖
Why TLE
373288
cxy000楼主2024/6/7 20:46
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll t;
ll n;
ll q,s,de,k;
ll sq;
ll a[114514];
ll d[114514][340];
ll d2[114514][340];
int main() {
	scanf("%lld",&t);
	while(t--) {
		scanf("%lld%lld",&n,&q);
		sq=sqrt(n);
		for(int i=1; i<=n; i++)scanf("%lld",&a[i]);
		for(int j=1; j<=339; j++) {
			for(int i=n+sq; i>=1; i--) {
				d[i][j]=d2[i][j]=0;
			}
		}
		for(int j=1; j<=sq; j++) {
			for(int i=n; i>=1; i--) {
				d[i][j]=d[i+j][j]+a[i];
			}
		}
		for(int j=1; j<=sq; j++) {
			for(int i=n; i>=1; i--) {
				d2[i][j]=d2[i+j][j]+d[i][j];
			}
		}
		while(q--) {
			scanf("%lld%lld%lld",&s,&de,&k);
			if(de<=sq) {
				printf("%lld ",d2[s][de]-d2[s+de*k][de]-k*d[s+de*k][de]);
			} else {
				ll ans=0;
				for(int i=1; i<=k; i++) {
					ans+=a[s+(i-1)*de]*i;
				}
				printf("%lld ",ans);
			}
		}
		printf("\n");
	}
	return 0;
}

上面的循环将 ii 和 jj 交换就AC了,但想知道为什么

2024/6/7 20:46
加载中...