【SCOI 2003】 严格n元树
【题目链接】
【算法】
f[i]表示深度小于等于i的严格n元树
显然,一棵深度小于等于i的严格n元树,就是一个根节点,下面有n棵子树,这n棵子树都是深度小于等于i-1的严格n元树,每棵子树有f[i-1]种形态,根据乘法原理,
可知f[i] = f[i-1] ^ n + 1
那么最后f[d] - f[d-1]就是答案
注意要用高精度计算
【代码】
#include<bits/stdc++.h>
using namespace std;
#define MAXN 35
#define MAXL 400 int i,n,d;
struct INT
{
int len;
int num[MAXL];
} ans,f[MAXN]; inline INT add(INT x)
{
int i;
reverse(x.num,x.num+x.len);
x.num[]++;
for (i = ; i < x.len; i++)
{
if (x.num[i] >= )
{
x.num[i+]++;
x.num[i] %= ;
}
}
while (x.num[x.len]) x.len++;
reverse(x.num,x.num+x.len);
return x;
}
inline void multipy(INT &a,INT b)
{
int i,j;
static INT res;
memset(res.num,,sizeof(res.num));
reverse(a.num,a.num+a.len);
reverse(b.num,b.num+b.len);
for (i = ; i < a.len; i++)
{
for (j = ; j < b.len; j++)
{
res.num[i+j] += a.num[i] * b.num[j];
}
}
res.len = a.len + b.len - ;
while (!res.num[res.len-]) res.len--;
for (i = ; i < res.len; i++)
{
if (res.num[i] >= )
{
res.num[i+] += res.num[i] / ;
res.num[i] %= ;
}
}
if (res.num[res.len]) res.len++;
reverse(res.num,res.num+res.len);
a = res;
}
inline INT _minus(INT a,INT b)
{
static INT res;
memset(res.num,,sizeof(res.num));
reverse(a.num,a.num+a.len);
reverse(b.num,b.num+b.len);
for (i = ; i < a.len; i++)
{
if (a.num[i] >= b.num[i]) res.num[i] = a.num[i] - b.num[i];
else
{
a.num[i+]--;
res.num[i] = a.num[i] + - b.num[i];
}
}
res.len = a.len;
while (!res.num[res.len-]) res.len--;
reverse(res.num,res.num+res.len);
return res;
}
inline INT power(INT a,int n)
{
INT res;
if (!n) return (INT){,{}};
if (n == ) return a;
res = power(a,n>>);
multipy(res,res);
if (n & ) multipy(res,a);
return res;
}
inline void output(INT x)
{
int i;
for (i = ; i < x.len; i++) printf("%d",x.num[i]);
puts("");
} int main()
{ scanf("%d%d",&n,&d);
f[] = (INT){,{}};
for (i = ; i <= d; i++) f[i] = add(power(f[i-],n));
ans = _minus(f[d],f[d-]);
output(ans); return ;
}
【SCOI 2003】 严格n元树的更多相关文章
- BZOJ 1089 (SCOI 2003) 严格n元树
Description 如果一棵树的所有非叶节点都恰好有n个儿子,那么我们称它为严格n元树.如果该树中最底层的节点深度为d (根的深度为0),那么我们称它为一棵深度为d的严格n元树.例如,深度为2的严 ...
- BZOJ 1089: [SCOI2003]严格n元树
1089: [SCOI2003]严格n元树 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 1591 Solved: 795[Submit][Statu ...
- [BZOJ1089][SCOI2003]严格n元树(递推+高精度)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1089 分析: 第一感觉可以用一个通式求出来,但是考虑一下很麻烦,不好搞的.很容易发现最 ...
- 【BZOJ】1089: [SCOI2003]严格n元树(递推+高精度/fft)
http://www.lydsy.com/JudgeOnline/problem.php?id=1089 题意:求深度为d的n元树数目.(0<n<=32, 0<=d<=16) ...
- bzoj 1089 [SCOI2003]严格n元树(DP+高精度)
1089: [SCOI2003]严格n元树 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 1250 Solved: 621[Submit][Statu ...
- BZOJ1089: [SCOI2003]严格n元树
1089: [SCOI2003]严格n元树 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 762 Solved: 387[Submit][Status ...
- [BZOJ]1089 严格n元树(SCOI2003)
十几年前的题啊……果然还处于高精度遍地走的年代.不过通过这道题,小C想mark一下n叉树计数的做法. Description 如果一棵树的所有非叶节点都恰好有n个儿子,那么我们称它为严格n元树.如果该 ...
- 【bzoj1089】严格n元树
Description 如果一棵树的所有非叶节点都恰好有n个儿子,那么我们称它为严格n元树.如果该树中最底层的节点深度为d(根的深度为0),那么我们称它为一棵深度为d的严格n元树.例如,深度为2的严格 ...
- 【BZOJ1089】[SCOI2003]严格n元树(高精度,动态规划)
[BZOJ1089][SCOI2003]严格n元树(高精度,动态规划) 题面 BZOJ 洛谷 题解 设\(f[i]\)表示深度为\(i\)的\(n\)元树个数.然后我们每次加入一个根节点,然后枚举它的 ...
随机推荐
- .net异步编程async和await的讨论收获
微软官方描述: C# 5 引入了一种简便方法,即异步编程.此方法利用了 .NET Framework 4.5 及更高版本..NET Core 和 Windows 运行时中的异步支持. 编译器可执行开发 ...
- 2016 Multi-University Training Contest 8 solutions BY 学军中学
1001: 假设有4个红球,初始时从左到右标为1,2,3,4.那么肯定存在一种方案,使得最后结束时红球的顺序没有改变,也是1,2,3,4. 那么就可以把同色球都写成若干个不同色球了.所以现在共有n个颜 ...
- Java设计模式之(设计模式的概述)
概述: 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用.设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案.这些解决方案是众多软件开发 ...
- CodeForces 596B Wilbur and Array
简单题,一个一个操作,最后就是答案. #include<cstdio> #include<cstring> #include<cmath> #include< ...
- P1359 租用游艇 洛谷
https://www.luogu.org/problem/show?pid=1359 题目描述 长江游艇俱乐部在长江上设置了n 个游艇出租站1,2,…,n.游客可在这些游艇出租站租用游艇,并在下游的 ...
- linux的shell的until循环举例说明
执行脚本: sh login.sh user,其中user为第一个参数 如下所示,如果用户‘user’登录,'who | grep "$1"'为true,until循环结束,程序继 ...
- topcoder srm 551
div1 250pt 题意:一个长度最多50的字符串,每次操作可以交换相邻的两个字符,问,经过最多MaxSwaps次交换之后,最多能让多少个相同的字符连起来 解法:对于每种字符,枚举一个“集结点”,让 ...
- @Retention n. 保留
@Retention n. 保留 学习了:https://blog.csdn.net/asdgbc/article/details/70196749 默认都是保留到class中,而在runtime中没 ...
- History(历史)命令用法 15 例
如果你经常使用 Linux 命令行,那么使用 history(历史)命令可以有效地提升你的效率.本文将通过实例的方式向你介绍 history 命令的 15 个用法. 使用 HISTTIMEFORMAT ...
- JAVA_如何复制项目
如何复制一个项目:复制这个项目,直接粘贴为一个新项目 注意复制完了之后一定要改一下Web Context-root 然后重新部署(注意Servers的Tomcat会变成当前项目,还要注意他的L ...