• [CCC 2018] 平衡树


    题面在这里!

        根据题目描述就可以直接模拟出一个暴力。

        如果把前 n^(1/2) 的树的方案数先一遍 O(n^(3/4)) 暴力预处理出来(其实复杂度并到不了这个级别),然后把n带进来直接暴力算就行了。

        顺便说一下这个玩意好像就是杜教筛的复杂度?

        只不过预处理不了 O(n^(2/3)),但是效果也不错了,毕竟n只有1e9。。

    #include<bits/stdc++.h>
    #define ll unsigned long long
    using namespace std;
    const int N=40005;
    
    int n,M;
    ll ans[N];
    unordered_map<int,ll> mmp;
    
    inline void init(){
    	ans[1]=ans[2]=1;
    	for(int i=3;i<=M;i++)
    	    for(int j=2,k,now;j<=i;j=k+1){
    	    	now=i/j,k=i/now;
    	    	ans[i]+=ans[now]*(ll)(k-j+1);
    		}
    }
    
    inline ll Get(int x){
    	if(x<=M) return ans[x];
    	if(mmp.count(x)) return mmp[x];
    	
    	ll an=0;
    	for(int i=2,j,now;i<=x;i=j+1){
    		now=x/i,j=x/now;
    		an+=Get(now)*(ll)(j-i+1);
    	}
    	
    	mmp[x]=an;
    	return an;
    }
    
    int main(){
    	scanf("%d",&n),M=sqrt(n+0.5)+1;
    	init(),printf("%llu
    ",Get(n));
    	return 0;
    }
    

      

  • 相关阅读:
    微信小程序(9)--音频及视频弹幕
    VUE 插槽
    ES6 export
    实现服务端向客户端推消息
    制作镜像语言网站
    xss 防护总结
    一步一步webpack 3
    一步步学习webpack2 配置
    一步步学习webpack 1
    node 插件
  • 原文地址:https://www.cnblogs.com/JYYHH/p/9500566.html
Copyright © 2020-2023  润新知