为什么会T
查看原帖
为什么会T
489327
小熙熙楼主2023/10/25 14:44
// LUOGU_RID: 131498452
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<ctime>
#include<algorithm>
#include<cmath>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#include<string>
#define ll long long
#define bug cout<<"bug"<<"\n"
#define mk make_pair
#define fl first
#define se second
#define pii pair<int,int>
using namespace std;
const ll maxn=3e5+100;
const ll inf=0x3f3f3f3f;
inline ll read(){ll x=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}
int n,m;
ll f[maxn];
ll a[maxn];
struct node{
	int id;
	int t,k;
}b[maxn];
int top;
ll ans[maxn];
bool cmp(node a,node b){if(a.k==b.k) return a.t<b.t;a.k<b.k;}
int main(){
	cin.tie(0);
	cout.tie(0);
	n=read();
	for(int i=1;i<=n;i++) a[i]=read();
	m=read();
	for(int i=1;i<=m;i++){
		int t,k;
		t=read(),k=read();
		if(k>=sqrt(n)){
			ll sum=0;
			for(int j=t;j<=n;j+=k){
				sum+=a[j];
			}
			ans[i]=sum;
		}
		else{
			++top;
			b[top].id=i;
			b[top].t=t;
			b[top].k=k;
		}
	}
	sort(b+1,b+top+1,cmp);
	for(int i=1;i<=top;++i){
		if(b[i].k==b[i-1].k) ans[b[i].id]=f[b[i].t];
		else{
			int k=b[i].k;
			for(int j=n;j>=b[i].t;--j){
				f[j]=f[j+k]+a[j];
			}
			ans[b[i].id]=f[b[i].t];
		}
	}
	for(int i=1;i<=m;++i){
		cout<<ans[i]<<"\n";
	}
	return 0;
}

nsqrt(n)nsqrt(n) 为啥会T

2023/10/25 14:44
加载中...