博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 1089 严格n元树 (递推+高精度)
阅读量:5354 次
发布时间:2019-06-15

本文共 1612 字,大约阅读时间需要 5 分钟。

题解:用a[i]表<=i时有几种树满足度数要求,那么这样就可以递归了,a[i]=a[i-1]^n+1。n个节点每个有a[i-1]种情况,那么将其相乘,最后加上1,因为深度为0也算一种。那么答案就是a[n]-a[n-1]。然后就是高精度的问题了,发现很久没有现码高精度没手感了,连高进度加法进位都出了些问题,需要特别注意。

#include 
#include
#include
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;}

转载于:https://www.cnblogs.com/forever97/p/bzoj1089.html

你可能感兴趣的文章
$ 一步一步学Matlab(3)——Matlab中的数据类型
查看>>
5.6.3.7 localeCompare() 方法
查看>>
Linux下好用的简单实用命令
查看>>
常用web字体的使用指南
查看>>
描绘应用程序级的信息
查看>>
poj2406-Power Strings
查看>>
2018/12/18 JS会像Linux一样改变编程
查看>>
php环境搭建脚本
查看>>
FTP主动模式与被动模式说明
查看>>
php 编译常见错误
查看>>
MES架构
查看>>
【Python3 爬虫】15_Fiddler抓包分析
查看>>
高性能JavaScript-JS脚本加载与执行对性能的影响
查看>>
关于标签之间因为换行等问题造成的空白间距问题处理
查看>>
hdu 2767(tarjan)
查看>>
sklearn之分类模型混淆矩阵和分类报告
查看>>
MySQL各存储引擎
查看>>
项目--简单导出CSV文件
查看>>
Oracle session相关数据字典(一)
查看>>
织梦文章内容提取第一张或者多张图片输出
查看>>