博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ-1211 树的计数
阅读量:4645 次
发布时间:2019-06-09

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

Prufer编码的应用。懒的写质因数分解,直接高精度。

注意当n=1的特殊情况的处理。

#include 
#include
#include
#include
#include
#include
#include
#define rep(i, l, r) for(int i=l; i<=r; i++)#define down(i, l, r) for(int i=l; i>=r; i--)#define N 234#define Q 1000000using namespace std;int read(){ int x=0, f=1; char ch=getchar(); while (ch<'0' || ch>'9') { if (ch=='-') f=-1; ch=getchar(); } while (ch>='0' && ch<='9') { x=x*10+ch-'0'; ch=getchar(); } return x*f;}int n, d[N], m[N], l;void Mult(int x){ rep(i, 1, l) m[i]*=x; rep(i, 1, l) m[i+1]+=m[i]/Q, m[i]%=Q; while (m[l+1]) l++, m[l+1]+=m[l]/Q, m[l]%=Q;}void Div(int x){ int a=0; down(i, l, 1) a=a*Q+m[i], m[i]=a/x, a%=x; while (!m[l] && l>1) l--;}int main(){ n=read(); if (n==1) { int x=read(); if (!x) printf("1"); else printf("0"); return 0; } rep(i, 1, n) d[i]=read()-1; rep(i, 1, n) if (d[i]<0 || d[i]>n-2) { printf("0\n"); return 0; } int a=0; rep(i, 1, n) a+=d[i]; if (a != n-2) { printf("0\n"); return 0; } m[l=1]=1; rep(i, 1, n-2) Mult(i); rep(i, 1, n) rep(j, 1, d[i]) Div(j); printf("%d", m[l]); down(i, l-1, 1) if (m[i]>=100000) printf("%d", m[i]); else if (m[i]>=10000) printf("0%d", m[i]); else if (m[i]>=1000) printf("00%d", m[i]); else if (m[i]>=100) printf("000%d", m[i]); else if (m[i]>=10) printf("0000%d", m[i]); else printf("00000%d", m[i]); return 0;}

  

转载于:https://www.cnblogs.com/NanoApe/p/4342778.html

你可能感兴趣的文章
网络攻防 第二周学习总结
查看>>
Top K
查看>>
C语言配置文件库iniparser
查看>>
sql STUFF用法
查看>>
1-1 用Python爬取豆瓣及IMDB上的电影信息
查看>>
关于解决session过期跳转到登陆页面并跳出iframe框架
查看>>
老黄历:编码式的统治策略
查看>>
HTML5 标准规范完成了
查看>>
使用Jenkins进行Android自动打包,自定义版本号等信息【转】
查看>>
[NOIP 2016普及组 No.1] 买铅笔
查看>>
单例模式(Singleton Pattern)
查看>>
由数字与字母组成的验证码的实现
查看>>
ResultSet自动关闭问题
查看>>
mvc 部分视图
查看>>
BZOJ3261: 最大异或和
查看>>
全端开发必备!10个最好的 Node.js MVC 框架
查看>>
Fabric远程自动化使用说明
查看>>
linux php命令安装
查看>>
热身赛应该做什么?
查看>>
动手实现读写锁
查看>>