整数分块求卡常
  • 板块P9148 除法题
  • 楼主___A__
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/6/25 09:50
  • 上次更新2024/6/25 11:28:05
查看原帖
整数分块求卡常
275860
___A__楼主2024/6/25 09:50

感觉常数不大 渐进2e9不到 但有5s

#include<bits/stdc++.h>
using namespace std;
#define int unsigned
const int N=5e3+5;
int n,a[N],ans,cnt[N],mem[N][N];
int div(int x,int y){
	if(mem[x][y]!=-1){
		return mem[x][y];
	}
	return mem[x][y]=x/y;
}
signed main(){
	cin>>n,memset(mem,-1,sizeof(mem));
	for(int i=1;i<=n;i++){
		cin>>a[i],cnt[a[i]]++;
	}
	for(int i=1;i<N;i++){
		cnt[i]+=cnt[i-1];
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(a[i]>a[j]){
				int val=0;
                for(int l=1;l<=min(a[i],a[j]);l++){
                	int r=min(div(a[i],div(a[i],l)),div(a[j],div(a[j],l)));
                	val+=(div(a[i],l))*(div(a[j],l))*(cnt[r]-cnt[l-1]),l=r;
				}
				ans-=(div(a[i],a[j]))*(div(a[i],a[j])),ans+=val*(div(a[i],a[j]));
			}
		}
	}
	cout<<ans;
}
2024/6/25 09:50
加载中...