宇宙蘑菇 小m在宇宙中发现了一种奇怪的蘑菇,他每天都会固定分裂一次,长度为x的蘑菇回分裂成两个长度为x-1和x+1的蘑菇
来源:学生作业帮 编辑:大师作文网作业帮 分类:数学作业 时间:2024/11/12 12:33:51
宇宙蘑菇
小m在宇宙中发现了一种奇怪的蘑菇,他每天都会固定分裂一次,长度为x的蘑菇回分裂成两个长度为x-1和x+1的蘑菇,但长度为0的蘑菇是不存在的,所以长度为1的蘑菇只能生成长度为2的蘑菇.现在小m第一天有一个长度为2的蘑菇,他想知道第n天他有多少个蘑菇.
一道oi题,
小m在宇宙中发现了一种奇怪的蘑菇,他每天都会固定分裂一次,长度为x的蘑菇回分裂成两个长度为x-1和x+1的蘑菇,但长度为0的蘑菇是不存在的,所以长度为1的蘑菇只能生成长度为2的蘑菇.现在小m第一天有一个长度为2的蘑菇,他想知道第n天他有多少个蘑菇.
一道oi题,
是贴吧上的吧?
算法:f[n]:=f[n-1]*2-(1的个数)
先模拟一遍(见贴吧17楼,此处略),1的个数为0 1 0 2 0 5 0 14 0 42 0 132.
而最大的值约等于2^10000,必须要用高精度!
如果为偶数,直接乘2,奇数要减1的个数,用ktl数组记录.
算ktl第n项,通项时间复杂度不够,找到如下算法:ktl[n]:=ktl[n-1]*2*(2*n-1)/(n+1);
源程序如下:
type A=array[0..10000] of longint;
var
b,c,x,an,ktl:A;
z:array[1..50000] of longint;
i,j,n,f,k:longint;
function divv(x:A;n:longint):A;
var i,j,h:longint; an:A;
begin
fillchar(an,sizeof(an),0);
j:=0;
for i:=x[0] downto 1 do
begin
an[i]:=(j*10+x[i]) div n;
j:=(j*10+x[i]) mod n;
end;
for i:=x[0] downto 1 do
if an[i]0 then begin an[0]:=i; break;end;
exit(an);
end;
function times(b:A;n:longint):A;
var ans:A;i:longint;
begin
fillchar(ans,sizeof(ans),0);
for i:=1 to b[0] do
begin
inc(ans[i],(b[i]*n) mod 10);
inc(ans[i+1],((b[i]*n) div 10) mod 10);
inc(ans[i+2],((b[i]*n) div 100) mod 10);
inc(ans[i+3],((b[i]*n) div 1000) mod 10);
inc(ans[i+1],ans[i] div 10);
ans[i]:=ans[i] mod 10;
end;
for i:=b[0] to b[0]+20 do
begin
inc(ans[i+1],ans[i] div 10);
ans[i]:=ans[i] mod 10;
end;
for i:= b[0]+20 downto b[0] do
if ans[i]0 then begin ans[0]:=i;break;end;
exit(ans);
end;
function decc(x:A):A;
var i,j:longint;
begin
for i:=1 to x[0] do
begin
x[i]:=x[i]-ktl[i];
if x[i]
再问: C++党路过……辛苦了……但是还是没有从数学的角度说明白为什么1的个数是卡塔兰数啊……求解释……
再答: 额。。。。。。我也不知道额。。。。规律就是这样么。。。。。 这串数就是卡塔兰数么。。。。。
算法:f[n]:=f[n-1]*2-(1的个数)
先模拟一遍(见贴吧17楼,此处略),1的个数为0 1 0 2 0 5 0 14 0 42 0 132.
而最大的值约等于2^10000,必须要用高精度!
如果为偶数,直接乘2,奇数要减1的个数,用ktl数组记录.
算ktl第n项,通项时间复杂度不够,找到如下算法:ktl[n]:=ktl[n-1]*2*(2*n-1)/(n+1);
源程序如下:
type A=array[0..10000] of longint;
var
b,c,x,an,ktl:A;
z:array[1..50000] of longint;
i,j,n,f,k:longint;
function divv(x:A;n:longint):A;
var i,j,h:longint; an:A;
begin
fillchar(an,sizeof(an),0);
j:=0;
for i:=x[0] downto 1 do
begin
an[i]:=(j*10+x[i]) div n;
j:=(j*10+x[i]) mod n;
end;
for i:=x[0] downto 1 do
if an[i]0 then begin an[0]:=i; break;end;
exit(an);
end;
function times(b:A;n:longint):A;
var ans:A;i:longint;
begin
fillchar(ans,sizeof(ans),0);
for i:=1 to b[0] do
begin
inc(ans[i],(b[i]*n) mod 10);
inc(ans[i+1],((b[i]*n) div 10) mod 10);
inc(ans[i+2],((b[i]*n) div 100) mod 10);
inc(ans[i+3],((b[i]*n) div 1000) mod 10);
inc(ans[i+1],ans[i] div 10);
ans[i]:=ans[i] mod 10;
end;
for i:=b[0] to b[0]+20 do
begin
inc(ans[i+1],ans[i] div 10);
ans[i]:=ans[i] mod 10;
end;
for i:= b[0]+20 downto b[0] do
if ans[i]0 then begin ans[0]:=i;break;end;
exit(ans);
end;
function decc(x:A):A;
var i,j:longint;
begin
for i:=1 to x[0] do
begin
x[i]:=x[i]-ktl[i];
if x[i]
再问: C++党路过……辛苦了……但是还是没有从数学的角度说明白为什么1的个数是卡塔兰数啊……求解释……
再答: 额。。。。。。我也不知道额。。。。规律就是这样么。。。。。 这串数就是卡塔兰数么。。。。。
宇宙蘑菇 小m在宇宙中发现了一种奇怪的蘑菇,他每天都会固定分裂一次,长度为x的蘑菇回分裂成两个长度为x-1和x+1的蘑菇
小兔子在森林中采了10千克蘑菇,蘑菇的含水量为99%,稍经晾晒后,重量变为5千克,求晾晒后蘑菇含水量?
小兔子在森林中采了10千克蘑菇,蘑菇的含水量为99%,稍经晾晒后,含水量下降到98%,求晾晒后蘑菇重?
蘑菇的商业用途在商业中,什么时候用到蘑菇?
蘑菇的蘑菇把有营养还是蘑菇伞有营养
昨天在山上无意中发现一种长在橡树上的蘑菇,请问这种蘑菇叫什么名字?
蘑菇的孢子能不能种蘑菇
下面蘑菇是什么种类的蘑菇啊?
蘑菇花园 怎么就能种出不同的蘑菇?
冒险岛奇怪的蘑菇怎么选择
小白兔和小灰兔一共采了90朵蘑菇,小白兔采的蘑菇是小灰兔的5倍,问:小白兔和小灰兔各采了多少朵蘑菇?
杨树林里有蘑菇吗?都有哪些蘑菇 我见到了一种咖啡色的蘑菇能吃吗