社区讨论

CF 2D求调

学术版参与者 2已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@mlibrxuw
此快照首次捕获于
2026/02/12 01:50
上周
此快照最后确认于
2026/02/14 11:45
5 天前
查看原帖
被这题硬控 2.5h,一直死在 pretest 4
CPP
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ll;
int t,n,a[200009];
ll ans;
struct bs{
	vector<ll> w;
	inline void clear(){
		w.clear(),w.resize((n+63)>>6);
		for(int i=0;i<w.size();++i) w[i]=0;
	}
	inline void set(int x){
		w[x>>6]|=(1ul<<(x&63));
	}
	inline bs l(int e){
		bs t;
		t.w.resize(w.size());
		for(int i=0;i<w.size();++i) t.w[i]=0;
		int o=(e>>6),r=(e&63);
		if(r){
    		t.w[0]=(w[0]<<r);
	    	for(int i=1;i<w.size();++i) t.w[i]=((w[i]<<r)|(w[i-1]>>(64-r)));
		}
		else{
		    for(int i=0;i<w.size();++i) t.w[i]=w[i];
		}
		if(o){
			for(int i=w.size()-1,j=w.size()-1-o;j>=0;--i,--j) t.w[i]=t.w[j];
			for(int i=o-1;i>=0;--i) t.w[i]=0;
		}
		if(n&63) t.w[w.size()-1]&=(1ul<<(n&63))-1;
		return t;
	}
	inline int p(const bs &o){
		int r=0;
		for(int i=0;i<w.size();++i) r+=__builtin_popcountll(w[i]&o.w[i]);
		return r;
	}
}f[449];
int main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>t;
	while(t--){
		cin>>n,ans=0;
		for(int i=1;i<=447;++i) f[i].clear();
		for(int i=0;i<n;++i) cin>>a[i],a[i]<=447&&(f[a[i]].set(i),0);
		for(int i=1;i<=447;++i){
			for(int j=i,k=1;j<n&&k<i;++k,j+=i) ans+=f[i].l(j).p(f[k])+f[k].l(j).p(f[i]);
			if(i*i<n) ans+=f[i].l(i*i).p(f[i]);
		}
		for(int i=0;i<n;++i) if(a[i]>=448) for(int j=i%a[i];j<n;j+=a[i]) if(a[j]<=447&&a[i]*(ll)a[j]==abs(j-i)) ++ans;
		cout<<ans<<"\n";
	}
	return 0;
}

回复

6 条回复,欢迎继续交流。

正在加载回复...