Description
小A在经历了和许多山头的一番大战后,总算拿到了最多的石子。他跌跌撞撞地来到了一个看上去比较隐蔽的山洞。让他惊奇的是,这个山洞里竟然摆满了美味佳肴,早已筋疲力尽饥肠辘辘的小A顺手抓了一个苹果咬了一口,他只觉得眼前一黑,便晕了过去……等他醒来时,发现自己被五花大绑,躺在一口大锅旁边。难道遇到了食人魔?小A大汗。
小A突然发现旁边的地上写着一行小字,“年轻人,恭喜你来到神奇山洞。如果你可以通过山洞,那么你将获得超人的rp,否则你将和很多人一样成为洞中的枯骨。按动你面前石锅左侧的按钮,它就可以随机变换图案,鲜花代表生机,骷髅则象征死亡,它们每次出现的可能性是相同的。如果连续两次出现鲜花,那你就可以挣脱绳子,通过山洞。”
小A的rp有限,在按动n次按钮后就会耗尽,如果此时他还未脱身,那他就over了。小A想请你帮忙计算当按了n次按钮时,他恰好能够脱身的几率。你能帮他吗?
小A突然发现旁边的地上写着一行小字,“年轻人,恭喜你来到神奇山洞。如果你可以通过山洞,那么你将获得超人的rp,否则你将和很多人一样成为洞中的枯骨。按动你面前石锅左侧的按钮,它就可以随机变换图案,鲜花代表生机,骷髅则象征死亡,它们每次出现的可能性是相同的。如果连续两次出现鲜花,那你就可以挣脱绳子,通过山洞。”
小A的rp有限,在按动n次按钮后就会耗尽,如果此时他还未脱身,那他就over了。小A想请你帮忙计算当按了n次按钮时,他恰好能够脱身的几率。你能帮他吗?
Input
一个正整数n
Output
第一行,整数a,表示所求概率的分母
第二行,整数b,表示所求概率的分子
不约分。
第二行,整数b,表示所求概率的分子
不约分。
2
4
1
1
Hint
样例说明:
第一次是鲜花的概率为1/2,第二次还是鲜花的概率为1/2,两次概率相乘为1/4。
对于30%的数据:n<=50
对于100%的数据:n<=32767
第一次是鲜花的概率为1/2,第二次还是鲜花的概率为1/2,两次概率相乘为1/4。
对于30%的数据:n<=50
对于100%的数据:n<=32767
1 type
2 arr=array[0..30000] of longint;
3 var
4 fz:arr;
5 n,i,la,a,b,c:longint;
6 l:array[0..2] of longint;
7 f:array[0..2] of arr;
8 procedure down(a,b:longint);
9 begin
10 writeln(b);
11 writeln(a);
12 close(input);
13 close(output);
14 halt;
15 end;
16 procedure prt(a:arr;l:longint);
17 var
18 i:longint;
19 begin
20 write(a[l]);
21 for i:=l-1 downto 1 do
22 begin
23 if a[i]<10 then write('000',a[i])
24 else if a[i]<100 then write('00',a[i])
25 else if a[i]<1000 then write('0',a[i])
26 else write(a[i]);
27 end;
28 writeln;
29 end;
30 procedure add(l1:longint;var l3:longint;var a,b,c:arr);
31 var
32 i,x:longint;
33 begin
34 i:=1;
35 x:=0;
36 while (i<=l1) do
37 begin
38 x:=a[i]+b[i]+x div 10000;
39 c[i]:=x mod 10000;
40 inc(i);
41 end;
42 c[i]:=x div 10000;
43 if c[i]>0 then l3:=l1+1
44 else l3:=l1;
45 end;
46 begin
47 readln(n);
48 f[0][1]:=1;
49 l[0]:=1;
50 f[1][1]:=2;
51 l[1]:=1;
52 a:=0;
53 b:=1;
54 c:=2;
55 if n=1 then down(0,1);
56 if n=2 then down(1,4);
57 for i:=2 to n-3 do
58 begin
59 add(l[b],l[c],f[a],f[b],f[c]);
60 a:=(a+1) mod 3;
61 b:=(b+1) mod 3;
62 c:=(c+1) mod 3;
63 end;
64 for i:=1 to l[b] do
65 fz[i]:=f[b][i];
66 la:=l[b];
67 f[0][1]:=2;
68 l[0]:=1;
69 a:=0;
70 b:=1;
71 for i:=2 to n do
72 begin
73 add(l[a],l[b],f[a],f[a],f[b]);
74 a:=ord(odd(a+1));
75 b:=ord(odd(b+1));
76 end;
77 prt(f[a],l[a]);
78 prt(fz,la);
79 end.
2 arr=array[0..30000] of longint;
3 var
4 fz:arr;
5 n,i,la,a,b,c:longint;
6 l:array[0..2] of longint;
7 f:array[0..2] of arr;
8 procedure down(a,b:longint);
9 begin
10 writeln(b);
11 writeln(a);
12 close(input);
13 close(output);
14 halt;
15 end;
16 procedure prt(a:arr;l:longint);
17 var
18 i:longint;
19 begin
20 write(a[l]);
21 for i:=l-1 downto 1 do
22 begin
23 if a[i]<10 then write('000',a[i])
24 else if a[i]<100 then write('00',a[i])
25 else if a[i]<1000 then write('0',a[i])
26 else write(a[i]);
27 end;
28 writeln;
29 end;
30 procedure add(l1:longint;var l3:longint;var a,b,c:arr);
31 var
32 i,x:longint;
33 begin
34 i:=1;
35 x:=0;
36 while (i<=l1) do
37 begin
38 x:=a[i]+b[i]+x div 10000;
39 c[i]:=x mod 10000;
40 inc(i);
41 end;
42 c[i]:=x div 10000;
43 if c[i]>0 then l3:=l1+1
44 else l3:=l1;
45 end;
46 begin
47 readln(n);
48 f[0][1]:=1;
49 l[0]:=1;
50 f[1][1]:=2;
51 l[1]:=1;
52 a:=0;
53 b:=1;
54 c:=2;
55 if n=1 then down(0,1);
56 if n=2 then down(1,4);
57 for i:=2 to n-3 do
58 begin
59 add(l[b],l[c],f[a],f[b],f[c]);
60 a:=(a+1) mod 3;
61 b:=(b+1) mod 3;
62 c:=(c+1) mod 3;
63 end;
64 for i:=1 to l[b] do
65 fz[i]:=f[b][i];
66 la:=l[b];
67 f[0][1]:=2;
68 l[0]:=1;
69 a:=0;
70 b:=1;
71 for i:=2 to n do
72 begin
73 add(l[a],l[b],f[a],f[a],f[b]);
74 a:=ord(odd(a+1));
75 b:=ord(odd(b+1));
76 end;
77 prt(f[a],l[a]);
78 prt(fz,la);
79 end.