题目传送门

思路:

  这道题需要前置知识prufer编码,这篇博客对prufer编码和这道题的分析写的很好。

  这里主要讲一些对大数阶乘的分解,一个办法当然是用高精度,上面这篇博客用的是java,还有一个办法是用万进制,但是普通的万进制只能计算乘法,而这里需要用到除法,又不能用逆元(因为没有取模)怎么办呢?

  我们发现,上面那篇博客得到的式子是一个组合数的式子,所以必然是整数,如果把分子和分母共同进行质因子分解,那么上面的质因子的数量必然大于下面的,所以我们就把每一个阶乘和数字进行质因子分解,然后对分解出来的质因子用万进制处理(我实际上用的是百万进制)。

  代码debug的时候有个很小的地方错了,看了一遍hzwer聚聚的代码,,然后就变默写了。。

#include<bits/stdc++.h>
#define clr(a,b) memset(a,b,sizeof(a))
#define fpn() freopen("simple.in","r",stdin)
#define rd read()
using namespace std;
typedef long long ll;
inline int read()
{
int x=,t=;char ch=getchar();
while((ch<''||ch>'')&&ch!='-')ch=getchar();
if(ch=='-')t=-,ch=getchar();
while(ch<=''&&ch>='')x=x*+ch-,ch=getchar();
return x*t;
}
const int maxn=;
int p=;
int ans[maxn],num[maxn],pri[maxn],cnt,l,tot;
int d[maxn],n,sum;
inline bool judge(int x){
for(int i=;i<=sqrt(x);i++){
if(x%i==)return false;
}
return true;
}
void prim(){
for(int i=;i<=;i++)
{
if(judge(i))pri[++cnt]=i;
}
}
void resolve(int x,int w){
for(int k=;k<=x;k++)
{
int a=k;
for(int i=;i<=cnt;i++){
if(a<=)break;
while(a%pri[i]==){
num[i]+=w;
a/=pri[i];
}
}
}
}
void mul(int x){
for(int i=;i<=l;i++)ans[i]*=x;
for(int i=;i<=l;i++){
ans[i+]+=ans[i]/p;
ans[i]%=p;
}
while(ans[l+]>){
l++;
ans[l+]+=ans[l]/p,ans[l]%=p;
}
}
void print()
{
for(int i=l;i>;i--)
if(i==l)printf("%d",ans[i]);
else printf("%06d",ans[i]);
}
int main(){
prim();
cin>>n;
if(n==){
int x;
cin>>x;
if(!x)printf("1\n");
else puts("");
return ;
}
int flag=;
for(int i=;i<=n;i++)
{
scanf("%d",&d[i]);
if(d[i]!=-){
if(d[i]==)flag=;
tot++;
sum+=d[i]-;
}
}
if(sum>n-||flag){
puts("");
return ;
}
resolve(n-,);
resolve(n--sum,-);
for(int i=;i<=n;i++){
if(d[i]!=-){
resolve(d[i]-,-);
}
}
ans[++l]=;
for(int i=;i<=cnt;i++){
while(num[i]--){
mul(pri[i]);
}
}
for(int i=;i<=n--sum;i++){
mul(n-tot);
}
print();
return ;
}

bzoj 1005: [HNOI2008]明明的烦恼 树的prufer序列+万进制的更多相关文章

  1. BZOJ 1005 [HNOI2008] 明明的烦恼(组合数学 Purfer Sequence)

    题目大意 自从明明学了树的结构,就对奇怪的树产生了兴趣...... 给出标号为 1 到 N 的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树? Input 第一行为 N( ...

  2. BZOJ 1005: [HNOI2008]明明的烦恼 Purfer序列 大数

    1005: [HNOI2008]明明的烦恼 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...

  3. bzoj 1005: [HNOI2008]明明的烦恼 prufer编号&&生成树计数

    1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2248  Solved: 898[Submit][Statu ...

  4. BZOJ 1005: [HNOI2008]明明的烦恼( 组合数学 + 高精度 )

    首先要知道一种prufer数列的东西...一个prufer数列和一颗树对应..然后树上一个点的度数-1是这个点在prufer数列中出现次数..这样就转成一个排列组合的问题了.算个可重集的排列数和组合数 ...

  5. BZOJ 1005 [HNOI2008]明明的烦恼 (Prufer编码 + 组合数学 + 高精度)

    1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 5786  Solved: 2263[Submit][Stat ...

  6. BZOJ 1005 [HNOI2008]明明的烦恼 purfer序列,排列组合

    1005: [HNOI2008]明明的烦恼 Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少 ...

  7. bzoj 1005 [HNOI2008] 明明的烦恼 (prufer编码)

    [HNOI2008]明明的烦恼 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 5907  Solved: 2305[Submit][Status][Di ...

  8. BZOJ 1005: [HNOI2008]明明的烦恼(prufer数列)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1005 题意: Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标 ...

  9. BZOJ 1005 [HNOI2008]明明的烦恼 ★(Prufer数列)

    题意 N个点,有些点有度数限制,问这些点可以构成几棵不同的树. 思路 [Prufer数列] Prufer数列是无根树的一种数列.在组合数学中,Prufer数列是由一个对于顶点标过号的树转化来的数列,点 ...

随机推荐

  1. 新建tomcat的server服务,在左侧项目浏览处,右键空白的地方,选择new,再选择other选项

    新建tomcat的server服务,在左侧项目浏览处,右键空白的地方,选择new,再选择other选项. 在弹出的窗口中,下拉滚动条找到Server,并单击next按钮. 在弹出的窗口中,找到第一个A ...

  2. 由于挂载的nfs存储目录掉下线,导致创建VM时,无法创建

    具体错误,如下截图 重新挂载存储后,在创建VM,将成功

  3. ROS导航包的介绍

    博客转载自:https://blog.csdn.net/handsome_for_kill/article/details/53130707#t3 ROS导航包的应用 利用ROS Navigation ...

  4. Django Rest Framework框架 ---- url控制器

    Django Rest Framework框架 ---- url控制器

  5. Swing滚动条重写

    Swing滚动条重写 摘自:https://blog.csdn.net/qq_40064948/article/details/81738191 未验证 Swing滚动条重写 2018年08月16日 ...

  6. CentOS目录与文件操作

    pwd:查看当前目录 touch:创建文件 touch a.c ls:查看当前目录下文件,也可以ls /tmp查看tmp下的文件 rm:删除文件 rm a.c,也可以rm a.c -rf 强制删除 c ...

  7. delegate Func Action Expression

    using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; na ...

  8. C#帮助类:Base64

    public class Base64 { #region Base64加密 ///<summary> ///Base64加密 ///</summary> ///<par ...

  9. Asp.net负载均衡之Session

    在WEB场中,动态网页往往会因为几台主机做了负载而产生SESSION丢失的问题,网上也有很多的介绍,我这里只将我经历的过程给大家分享一下: 系统要运行在负载平衡的 Web 场环境中,而系统配置文件we ...

  10. 华硕X550VC安装ubuntu后wifi无法连接问题

    在网上找了很多资料比如重新编译内核,想办法连上有线网络然后更新驱动,下载离线驱动安装包…… 等等方法 其中有些方法实际测试的时候失败了,文章是几年前的,可能缺少某些依赖.上个网都这么麻烦实在让人疲惫. ...