fjwc2019 D6T1 堆(组合数+打表)
但是每个点都遍历一遍,有些点的子树完全相同却重复算了
忽然记起完全二叉树的性质之一:每个非叶节点的子树中至少有一个是满二叉树
那么我们预处理满二叉树的那一块,剩下的dfs就可以辣
求阶乘.......分块打表
设打表分成$k$段,则复杂度$O(logn+n/k)$
#include<cstdio>
const int mod=1e9+,W=1e7;
const int tab[]={,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,};
int n,f[],ans;
inline int Pow(int x,int y){
int re=;
for(;y;y>>=,x=1ll*x*x%mod)
if(y&) re=1ll*re*x%mod;
return re;
}
int dfs(int x){
int i=;
while((<<i)-<x) ++i;
if((<<i)-==x) return f[i];
if(x+(<<(i-))<=(<<i)-) return 1ll*Pow(x,mod-)*f[i-]%mod*dfs(x-(<<(i-)))%mod;
else return 1ll*Pow(x,mod-)*f[i-]%mod*dfs(x-(<<(i-)))%mod;
}
int main(){
freopen("heap.in","r",stdin);
freopen("heap.out","w",stdout);
scanf("%d",&n); f[]=;
for(int i=;i<=;++i) f[i]=1ll*f[i-]*f[i-]%mod*Pow((<<i)-,mod-)%mod;
ans=tab[(n-)/W];
for(int i=(n-)/W*W+;i<=n;++i) ans=1ll*ans*i%mod;
ans=1ll*ans*dfs(n)%mod;
printf("%d",ans);
return ;
}
fjwc2019 D6T1 堆(组合数+打表)的更多相关文章
- Chosen by god【组合数打表】
Chosen by god 题目链接(点击) Everyone knows there is a computer game names "hearth stone", recen ...
- Trie、并查集、堆、Hash表学习过程以及遇到的问题
Trie.并查集.堆.Hash表: Trie 快速存储和查找字符串集合 字符类型统一,将单词在最后一个字母结束的位置上打上标记 练习题:Trie字符串统计 import java.util.*; pu ...
- 魔法效果——dijkstra+堆(邻接表存储)
dijkstra本身每次要for一遍,才能找出最小的节点,但用了堆之后,直接取出堆首就可以了. 但要注意的一点是,c++自带的stl里的priority_queue本身是先入大出的,而我们要求的是最小 ...
- Dijkstra堆优化+邻接表
Dijkstra算法是个不错的算法,但是在优化前时间复杂度太高了,为O(nm). 在经过堆优化后(具体实现用的c++ STL的priority_queue),时间复杂度为O((m+n) log n), ...
- [翻译] 聚集索引表 VS 堆表
前言: 本文对这篇博客Clustered Tables vs Heap Tables 的翻译, 如有翻译不对或不好的地方,敬请指出,大家一起学习进步. 问题描述 创建一个新表时,一个非常重要的设计原则 ...
- Bzoj 2006: [NOI2010]超级钢琴 堆,ST表
2006: [NOI2010]超级钢琴 Time Limit: 20 Sec Memory Limit: 552 MBSubmit: 2222 Solved: 1082[Submit][Statu ...
- Windows编程中的堆管理(过于底层,一般不用关心)
摘要: 本文主要对Windows内存管理中的堆管理技术进行讨论,并简要介绍了堆的创建.内存块的分配与再分配.堆的撤销以及new和delete操作符的使用等内容. 关键词: 堆:堆管理 1 引言 在大多 ...
- python数据结构之堆(heap)
本篇学习内容为堆的性质.python实现插入与删除操作.堆复杂度表.python内置方法生成堆. 区分堆(heap)与栈(stack):堆与二叉树有关,像一堆金字塔型泥沙:而栈像一个直立垃圾桶,一列下 ...
- 一种快速统计SQL Server每个表行数的方法
转载自:http://www.cnblogs.com/kenyang/archive/2013/04/09/3011447.html 我们都知道用聚合函数count()可以统计表的行数.如果需要统计数 ...
随机推荐
- 【LeetCode每天一题】Search Insert Position(搜索查找位置)
Given a sorted array and a target value, return the index if the target is found. If not, return the ...
- PHP socket通信之UDP
服务端: //服务器信息 $server = 'udp://127.0.0.1:9998'; //消息结束符号 $msg_eof = "\n"; $socket = stream_ ...
- gitlab4.0_安装
一,安装环境 OS:redhat7.4 二,安装依赖包 yum -y groupinstall 'Development Tools' ===>待验证 yum -y install pytho ...
- Nodejs中原生遍历文件夹
最近在听老师讲的node课程,有个关于把异步变为同步读取文件夹的知识点做一些笔记, 让迭代器逐个自执行.
- Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
很明显应该是HADOOP_HOME的问题.如果HADOOP_HOME为空,必然fullExeName为null\bin\winutils.exe.解决方法很简单,配置环境变量,不想重启电脑可以在程序里 ...
- Unity之如何从fbx提取Animation clip文件
见代码: static void CreateAnim(string fbx, string target) { AnimationClip src = AssetDatabase.LoadAsset ...
- linux打包压缩与搜索命令
1.tar命令 tar命令用于对文件进行打包压缩或解压,格式为“tar [选项] [文件]”. tar命令的参数及其作用 参数 作用 -c 创建压缩文件 -x 解开压缩文件 -t 查看压缩包内有哪些 ...
- django 网站的搭建(1)
使用 python django 模块来搭建自己的博客网站. 本人环境:阿里云centos7+django1.10+python3.5 使用工具:putty + winscp 1.首先安装python ...
- hdu5293 lca+dp+树状数组+时间戳
题意是给了 n 个点的树,会有m条链条 链接两个点,计算出他们没有公共点的最大价值, 公共点时这样计算的只要在他们 lca 这条链上有公共点的就说明他们相交 dp[i]为这个点包含的子树所能得到的最 ...
- Python 1.安装
Python是一种开源语言,有很多第三方库. 1. Python3 及相关组件下载及安装 a. Python3下载:https://www.python.org/downloads/->点击以下 ...