BZOJ 1089 严格n元树 (递推+高精度)
题解:用a[i]表<=i时有几种树满足度数要求,那么这样就可以递归了,a[i]=a[i-1]^n+1。n个节点每个有a[i-1]种情况,那么将其相乘,最后加上1,因为深度为0也算一种。那么答案就是a[n]-a[n-1]。然后就是高精度的问题了,发现很久没有现码高精度没手感了,连高进度加法进位都出了些问题,需要特别注意。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct data{int len,a[2002];}a[35],c,p,t;
int n,d;
data mul(data a,data b){
memset(c.a,0,sizeof c.a);
for(int i=1;i<=a.len;i++)
for(int j=1;j<=b.len;j++){
c.a[i+j-1]+=a.a[i]*b.a[j];
c.a[i+j]+=c.a[i+j-1]/10000;
c.a[i+j-1]%=10000;
}c.len=2000;
while(c.len&&!c.a[c.len])c.len--;
return c;
}
data sum(data a,data b){
memset(c.a,0,sizeof c.a);
c.len=max(a.len,b.len);
for(int i=1;i<=c.len;i++){
c.a[i]+=a.a[i]+b.a[i];
c.a[i+1]+=c.a[i]/10000;
c.a[i]%=10000;
}c.len=2000;
while(c.len&&!c.a[c.len])c.len--;
return c;
}
data sub(data a,data b){
memset(c.a,0,sizeof c.a);
c.len=a.len;
for(int i=1;i<=a.len;i++){
c.a[i]=a.a[i]-b.a[i];
if(c.a[i]<0)c.a[i]+=10000,a.a[i+1]--;
}while(c.len&&!c.a[c.len])c.len--;
return c;
}
data power(data a,int b){
memset(p.a,0,sizeof p.a); p.len=1; p.a[1]=1;
while(b){
if(b&1)p=mul(p,a);
b>>=1; a=mul(a,a);
}return p;
}
data op(data a,int b){
t.len=1; t.a[1]=1;
return sum(power(a,b),t);
}
int main(){
scanf("%d%d",&n,&d);
if(!d)return puts("1"),0;
a[0].len=1; a[0].a[1]=1;
for(int i=1;i<=d;i++)a[i]=op(a[i-1],n);
a[d]=sub(a[d],a[d-1]);
printf("%d",a[d].a[a[d].len]);
for(int i=a[d].len-1;i;i--)printf("%04d",a[d].a[i]);
return 0;
}
BZOJ 1089 严格n元树 (递推+高精度)的更多相关文章
- [BZOJ1089][SCOI2003]严格n元树(递推+高精度)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1089 分析: 第一感觉可以用一个通式求出来,但是考虑一下很麻烦,不好搞的.很容易发现最 ...
- bzoj 1089 SCOI2003严格n元树 递推
挺好想的,就是一直没调过,我也不知道哪儿的错,对拍也拍了,因为数据范围小,都快手动对拍了也不知道 哪儿错了.... 我们定义w[i]代表深度<=i的严格n元树的个数 那么最后w[d]-w[d-1 ...
- [BZOJ]1089 严格n元树(SCOI2003)
十几年前的题啊……果然还处于高精度遍地走的年代.不过通过这道题,小C想mark一下n叉树计数的做法. Description 如果一棵树的所有非叶节点都恰好有n个儿子,那么我们称它为严格n元树.如果该 ...
- PKU 2506 Tiling(递推+高精度||string应用)
题目大意:原题链接有2×1和2×2两种规格的地板,现要拼2×n的形状,共有多少种情况,首先要做这道题目要先对递推有一定的了解.解题思路:1.假设我们已经铺好了2×(n-1)的情形,则要铺到2×n则只能 ...
- 递推+高精度+找规律 UVA 10254 The Priest Mathematician
题目传送门 /* 题意:汉诺塔问题变形,多了第四个盘子可以放前k个塔,然后n-k个是经典的汉诺塔问题,问最少操作次数 递推+高精度+找规律:f[k]表示前k放在第四个盘子,g[n-k]表示经典三个盘子 ...
- [luogu]P1066 2^k进制数[数学][递推][高精度]
[luogu]P1066 2^k进制数 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻 ...
- 【BZOJ】1089: [SCOI2003]严格n元树(递推+高精度/fft)
http://www.lydsy.com/JudgeOnline/problem.php?id=1089 题意:求深度为d的n元树数目.(0<n<=32, 0<=d<=16) ...
- 【noi 2.6_9280】&【bzoj 1089】严格n元树(DP+高精度+重载运算符)
题意:定义一棵树的所有非叶节点都恰好有n个儿子为严格n元树.问深度为d的严格n元树数目. 解法:f[i]表示深度为<=i的严格n元树数目.f[i]-f[i-1]表示深度为i的严格n元树数目.f[ ...
- bzoj 1089 [SCOI2003]严格n元树(DP+高精度)
1089: [SCOI2003]严格n元树 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 1250 Solved: 621[Submit][Statu ...
随机推荐
- SSIS: 把存储在数据库中的图片导出来
Data Flow Task Step 1 获取二进制图片数据 )='C:\labs\Images\' SELECT ThumbNailPhoto,@path+ThumbnailPhotoFileNa ...
- wing 5.0 注册机
输入License id 进入下一页获得request key ,输入request key 后点击生成,即可生成激活码,亲测可用 下载链接 密码:adwj
- headfirst之装饰模式
class A A.hello class B extends A B.hello = A.hello+B 装饰模式:子类对父类想要包装的方法进行重写,使之成为加强版
- js判断年龄是否在0-100之间
//判断年龄 $('#info_age').change(function(){ var _val = $(this).val(); -]+$/.test( _val ))||_val< || ...
- 用css控制一个DIV画图标。
在实际开发中,我们会用到一些小图形,图标.大多数情况下都是用图片来实现的,同时对图片进行处理使图片大小尽可能的缩小.但是图片在怎么处理也是按KB来算的.但是要是用CSS画,只要用很少的空间就能完成同样 ...
- Decorators and Wrappers in Python
python代码一贯以优雅,简洁著称,而有时侯反而会让人难以理解,比如说wrapper(或者说decorator),这种方式提高了代码的可重用性,使用起来更简洁方便. 举个例子,比如WebApp常用的 ...
- 如何使ListView具有像ios一样的弹性
ListView 是我们在开发过程中经常使用的控件之一,通常情况下,当我们没有对它进行自定义或者给添加headerview 或者footerView的时候,他都没有一个很好的反馈效果,但是相比较而言, ...
- Python GUI编程各种实现的对比
Python GUI编程各种实现的对比 从 Python 语言的诞生之日起,就有许多优秀的 GUI 工具集整合到 Python 当中,这些优秀的 GUI 工具集,使得 Python 也可以在图形界面编 ...
- POJ 1721 CARDS(置换群)
[题目链接] http://poj.org/problem?id=1721 [题目大意] 给出a[i]=a[a[i]]变换s次后的序列,求原序列 [题解] 置换存在循环节,因此我们先求出循环节长度,置 ...
- windows下Qt Creator5.1.0编写程序以及调用OpenCV库
系统说明 最近使用opencv编写程序,程序编的差不多就学习使用QT加个界面,首先声明下本人的系统和使用的软件版本, 系统: windows xp QT IDE:QT Creator5.1.0 Ope ...