写的很好的题解:http://www.cnblogs.com/zhj5chengfeng/archive/2013/08/23/3278557.html

我这种蒻蒻什么都不会啊……

代码:(copy的)

  var
a:array[..]of longint;
su,p:array[..]of longint;
b:array[..]of boolean;
ans:array[..]of longint;
i,j,m,n,s,k,w,sum,c:longint;
procedure add(t,d:longint);
var
i:longint;
begin
for i:= to s do
while t mod su[i]= do
begin
inc(p[i],d);
t:=t div su[i];
end;
end;
procedure cheng(t:longint);
var
i:longint;
begin
for i:= to c do
ans[i]:=ans[i]*t;
for i:= to c- do
begin
inc(ans[i+],ans[i] div );
ans[i]:=ans[i] mod ;
end;
while ans[c]>= do
begin
ans[c+]:=ans[c] div ;
ans[c]:=ans[c] mod ;
inc(c);
end;
end;
begin
readln(n);
for i:= to n do
read(a[i]);
fillchar(b,sizeof(b),true);
for i:= to n do
if b[i] then
begin
inc(s);
su[s]:=i;
for j:= to n div i do
b[i*j]:=false;
end;
fillchar(p,sizeof(p),);
sum:=n-;
k:=n;
for i:= to n do
if a[i]<>- then
begin
for j:= to a[i]- do
begin
add(sum,);
dec(sum);
add(j,-);
end;
dec(k);
end;
c:=;
fillchar(ans,sizeof(ans),);
ans[]:=;
for i:= to s do
for j:= to p[i] do
cheng(su[i]);
for i:= to sum do
cheng(k);
for i:=c downto do
write(ans[i]);
end.

尼玛,总是出现莫名的bug ,浪费我的时间!

 var i,j,sum,tot,n:longint;
a,b,p,d:array[..] of longint;
flag:boolean;
procedure init;
begin
readln(n);sum:=;tot:=;
for i:= to n do
begin
readln(d[i]);
if (d[i]=) or (d[i]>n-) then flag:=true;
if d[i]<>- then begin inc(tot);inc(sum,d[i]-);end;
end;
end;
procedure incc(x:longint);
var i:longint;
begin
for i:= to x do
begin
if x mod i= then
while x mod i= do
begin
inc(p[i]);
x:=x div i;
if x= then break;
end;
end;
end;
procedure decc(x:longint);
var i:longint;
begin
for i:= to x do
begin
if x mod i= then
while x mod i= do
begin
dec(p[i]);
x:=x div i;
if x= then break;
end;
end;
end;
procedure mul(x:longint);
var i:longint;
begin
for i:= to b[]+ do
begin
b[i]:=b[i]*x;
inc(b[i+],b[i] div );
b[i]:=b[i] mod ;
end;
while b[b[]+]<> do inc(b[]);
end;
procedure main;
begin
fillchar(p,sizeof(p),);
for i:=n--sum+ to n- do incc(i);
for i:= to n--sum do incc(n-tot);
for i:= to n do
if d[i]<>- then
begin
for j:= to d[i]- do decc(j);
end;
b[]:=;b[]:=;
for i:= to n do if p[i]<> then for j:= to p[i] do mul(i);
end;
procedure print;
begin
write(b[b[]]);
for i:=b[]- downto do
begin
if b[i]>= then write(b[i]) else
if b[i]>= then write('',b[i]) else
if b[i]>= then write('',b[i]) else
write('',b[i]);
end;
end;
begin
assign(input,'input.txt');assign(output,'output.txt');
reset(input);rewrite(output);
flag:=false;
init;
if flag then writeln() else begin main;print;end;
close(input);close(output);
end.

HNOI2008明明的烦恼的更多相关文章

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

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

  2. bzoj1005 [HNOI2008]明明的烦恼

    1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3032  Solved: 1209 Description ...

  3. 【bzoj1005】[HNOI2008]明明的烦恼

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

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

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

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

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

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

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

  7. 【BZOJ1005】[HNOI2008]明明的烦恼(prufer序列)

    [BZOJ1005][HNOI2008]明明的烦恼(prufer序列) 题面 BZOJ 洛谷 题解 戳这里 #include<iostream> #include<cstdio> ...

  8. 【BZOJ 1005】 1005: [HNOI2008]明明的烦恼 (prufer数列+高精度)

    1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 4981  Solved: 1941 Description ...

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

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

  10. 【BZOJ1005/1211】[HNOI2008]明明的烦恼/[HNOI2004]树的计数 Prufer序列+高精度

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

随机推荐

  1. Random类(java.util)

    转自 Random类中实现的随机算法是伪随机,也就是有规则的随机.在进行随机时,随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的变换,从而产生需要的随机数字. 相同种子数的Rand ...

  2. Relay log read failure

    root@localhost > show slave status\G*************************** 1. row ************************** ...

  3. JAVA中的各种 哈希码(HashCode) 与 equals方法在HIBERNATE的实际应用[转载]

    1.什么是哈希码(HashCode) 在Java中,哈希码代表对象的特征.例如对象 Java代码 String str1 = “aa”, str1.hashCode= 3104 String str2 ...

  4. ASIHTTPRequest的使用(转)

    转载自:http://fushengfei.iteye.com/blog/1147112 博客分类: IOS   原文地址:http://wiki.magiche.net/pages/viewpage ...

  5. 【BZOJ1468】Tree

    Description 给你一棵TREE,以及这棵树上边的距离.问有多少对点它们两者间的距离小于等于K Input N(n<=40000) 接下来n-1行边描述管道,按照题目中写的输入 接下来是 ...

  6. Java中的break与continue区别

    break跳出当前循环执行循环下面的程序, 如果break出现在嵌套循环的内层循环, 则break语句只会跳出当前层的循环; 当程序执行到continue时时, 则跳过本次循环程序重新回到循环开始继续 ...

  7. TWaver初学实战——如何在EasyUI中插入TWaver(续)

    上次文章虽然简单易懂,但很有些小伙伴不满意:你这TWaver和EasyUI结合,只不过生硬地把TWaver图形插进去了,数据和人家EasyUI没一毛钱关系.嘿嘿,不就是想发生关系嘛,没问题啊!咱就还用 ...

  8. Android Studio 单刷《第一行代码》系列 04 —— Activity 相关

    前情提要(Previously) 本系列将使用 Android Studio 将<第一行代码>(书中讲解案例使用Eclipse)刷一遍,旨在为想入坑 Android 开发,并选择 Andr ...

  9. shell复习笔记----查找与替换

    查找文档 以grep 程序查找文本(匹配文本 matching text)相当方便.传统上有三种程序可以用来查找整个文本文件. grep 最早的文本匹配程序.其最简单的方式就是使用固定字符串 $ wh ...

  10. 【线段树/数学/扩展欧几里得】 Bzoj 3913:奇数国

    Description 在一片美丽的大陆上有100000个国家,记为1到100000.这里经济发达,有数不尽的账房,并且每个国家有一个银行.某大公司的领袖在这100000个银行开户时都存了3大洋,他惜 ...