bzoj1005
有了bzoj1430的经验解决这题就不是什么难事了
首先考虑度数确定的点,令tot=sigma(d[i]-1)
首先给这tot个数分配prufer编码的位置有C(tot,n-2)种方案
每个方案中是可以进行可重复排列的,对应tot!/[(d[1]-1)!*(d[2]-1)!*…*(d[k]-1)!] 这里都是已确定的度数的点
下面考虑无所谓的点,这些可以在prufer序列中随意分配
因此答案是m^(n-2-tot) (m表示未确定度数的点的个数)
根据乘法原理答案就是C(tot,n-2)*m^(n-2-tot)*tot!/[(d[1]-1)!*(d[2]-1)!*…*(d[k]-1)!]
=(n-2)!*m^(n-2-tot)/[(d[1]-1)!*(d[2]-1)!*…*(d[k]-1)!*(n-2-tot)!]
肯定要高精度,但是我们要尽量避免除法
考虑到这里计算出的方案一定是整数,于是我们可以先质因数分解,然后消去,这要就是单精度的高精度乘法了
var d:array[..,..] of longint;
a,p,c:array[..] of longint;
ans:array[..] of longint;
l,i,m,x,n,w,j,t:longint;
f:boolean; procedure mul(x,y:longint);
var i,j,u,v:longint;
begin
for i:= to y do
begin
v:=;
for j:= to l do
begin
u:=ans[j]*x+v;
v:=u div ;
ans[j]:=u mod ;
end;
while v> do
begin
inc(l);
ans[l]:=v mod ;
v:=v div ;
end;
end;
end; begin
readln(n);
for i:= to n do
begin
f:=true;
for j:= to trunc(sqrt(i)) do
if i mod j= then
begin
f:=false;
break;
end;
if f then
begin
inc(t);
p[t]:=i;
end;
end;
for i:= to n do
begin
readln(a[i]);
if a[i]<>- then m:=m+a[i]-
else inc(w);
end;
for i:= to n- do
begin
for j:= to t do
d[i,j]:=d[i-,j];
x:=i;
j:=;
while x<> do //预处理阶乘的质因数分解
begin
while (x<>) and (x mod p[j]=) do
begin
x:=x div p[j];
inc(d[i,j]);
end;
inc(j);
end;
end;
ans[]:=;
l:=;
x:=w;
j:=;
while x<> do //m^(n--tot)的质因数分解
begin
while (x<>) and (x mod p[j]=) do
begin
x:=x div p[j];
c[j]:=c[j]+(n--m);
end;
inc(j);
end; for i:= to t do
c[i]:=c[i]+d[n-,i]-d[n--m,i]; for i:= to n do
if a[i]<>- then
begin
for j:= to t do
c[j]:=c[j]-d[a[i]-,j];
end;
for i:= to t do
mul(p[i],c[i]);
for i:=l downto do
write(ans[i]);
writeln;
end.
bzoj1005的更多相关文章
- 【bzoj1005】 HNOI2008—明明的烦恼
http://www.lydsy.com/JudgeOnline/problem.php?id=1005 (题目链接) 题意 给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多 ...
- BZOJ1005 HNOI2008明明的烦恼(prufer+高精度)
每个点的度数=prufer序列中的出现次数+1,所以即每次选一些位置放上某个点,答案即一堆组合数相乘.记一下每个因子的贡献分解一下质因数高精度乘起来即可. #include<iostream&g ...
- 【BZOJ1005】[HNOI2008]明明的烦恼(prufer序列)
[BZOJ1005][HNOI2008]明明的烦恼(prufer序列) 题面 BZOJ 洛谷 题解 戳这里 #include<iostream> #include<cstdio> ...
- 【BZOJ1005/1211】[HNOI2008]明明的烦恼/[HNOI2004]树的计数 Prufer序列+高精度
[BZOJ1005][HNOI2008]明明的烦恼 Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可 ...
- [BZOJ1005]Prufer数列+排列组合
一棵树的Prufer数列 每次在剩下的树中找到标号最小的叶子节点(对于无根树而言即是度数为1的节点),删去. 同时将其父节点(即与其相连的唯一点)加入Prufer数列当中. 一个Prufer数列所对应 ...
- BZOJ1005明明的烦恼 Prufer + 分解質因數 + 高精度
@[高精度, Prufer, 質因數分解] Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在 任意两点间连线,可产生多 ...
- 「BZOJ1005」[HNOI2008] 明明的烦恼
「BZOJ1005」[HNOI2008] 明明的烦恼 先放几个prufer序列的结论: Prufer序列是一种对有标号无根树的编码,长度为节点数-2. 具体存在无根树转化为prufer序列和prufe ...
- bzoj1005 [HNOI2008]明明的烦恼
1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3032 Solved: 1209 Description ...
- 【BZOJ1005】【HNOI2008】明明的烦恼
又是看黄学长的代码写的,估计我的整个BZOJ平推计划都要看黄学长的代码写 原题: 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连 ...
- 【bzoj1005】[HNOI2008]明明的烦恼
1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 4175 Solved: 1660[Submit][Stat ...
随机推荐
- JSBridge(Android和IOS平台)的设计和实现
前言 对于商务类的app,随着app注册使用人数递增,app的运营者们就会逐渐考虑在应用中开展一些推广活动.大多数活动具备时效性强.运营时间短的特征,一般产品们和运营者们都是通过wap页面快速投放到产 ...
- linux中echo的用法 分类: 学习笔记 linux ubuntu 2015-07-14 14:27 21人阅读 评论(0) 收藏
1.echo命令我们常用的选项有两个,一个是-n,表示输出之后不换行,另外一个是-e,表示对于转义字符按相应的方式处理,如果不加-e那么对于转义字符会按普通字符处理. 2.echo输出时的转义字符 \ ...
- 9.27 noip模拟试题
工资 (money/money.in/money.out) 时限1000ms 内存256MB 聪哥在暑假参加了打零工的活动,这个活动分为n个工作日,每个工作日的工资为Vi.有m个结算工钱的时间,聪哥可 ...
- foreach遍历----for(object o: list)
备注,两种写法是一样的.
- jetty服务器访问系统的域名
jetty-env.xml=><Set name="contextPath">/epps-compensation-backend</Set> 这个决 ...
- Linux下su与su -命令的区别
在启动服务器ntpd服务时遇到一个问题 使用 su root 切换到root用户后,不可以使用service命令: 使用 su - 后,就可以使用service命令了. 原因: su命令和su -命令 ...
- POJ刷题记录 (。・`ω´・)(Progress:6/50)
1743:前后作差可以转化成不可重叠最长公共字串问题,运用后缀数组解决(参考罗穗骞神犇的论文) #include <cstdio> #include <cstring> #in ...
- Codeforces Round #286 (Div. 1) 解题报告
A.Mr. Kitayuta, the Treasure Hunter 很显然的一个DP,30000的数据导致使用map+set会超时.题解给了一个非常实用的做法,由于每个点有不超过250种状态,并且 ...
- placeholder调整颜色
placeholder需要设定以下样式: ::-webkit-input-placeholder { /* WebKit browsers */ color: #999; } :-moz-placeh ...
- PHP~foreach遍历名单数组~有必要多次观看练习