记录编号 22210 评测结果 AAAAAAAAAA
题目名称 拯救 最终得分 100
用户昵称 Gravatarybh 是否通过 通过
代码语言 Pascal 运行时间 0.032 s
提交时间 2010-11-17 17:45:40 内存使用 1.26 MiB
显示代码纯文本
  1. {拯救 NOIP模拟2010-11-17
  2. 数值递推 高精度计算
  3. Author: yangbohua
  4. Time: 2010-11-17}
  5.  
  6. program savey;
  7. type
  8. t=array[0..400] of byte;
  9.  
  10. var
  11. g:array[0..1000] of t;
  12. lg:array[0..1000] of integer;
  13. f:array[0..1,0..1000] of t;
  14. lf:array[0..1,0..1000] of integer;
  15. n,i,a,p:integer;
  16.  
  17. procedure add(a,b:t;la,lb:integer;var c:t;var lc:integer);
  18. var
  19. i,l:integer;
  20. begin
  21. fillchar(c,sizeof(c),0);
  22. if la>lb
  23. then l:=la
  24. else l:=lb;
  25. for i:=1 to l do
  26. begin
  27. c[i]:=c[i]+a[i]+b[i];
  28. if c[i]>=10 then
  29. begin
  30. c[i]:=c[i]-10;
  31. c[i+1]:=c[i+1]+1;
  32. end;
  33. end;
  34. if c[l+1]>0
  35. then lc:=l+1
  36. else lc:=l;
  37. end;
  38.  
  39. begin
  40. assign(input,'savey.in');
  41. reset(input);
  42. assign(output,'savey.out');
  43. rewrite(output);
  44. readln(n);
  45. g[1,1]:=1;
  46. lg[1]:=1;
  47. for i:=2 to n do
  48. begin
  49. add(g[i-1],g[i-1],lg[i-1],lg[i-1],g[i],lg[i]);
  50. g[i,1]:=g[i,1]+1;
  51. p:=1;
  52. while g[i,p]>=10 do
  53. begin
  54. g[i,p]:=g[i,p]-10;
  55. g[i,p+1]:=g[i,p+1]+1;
  56. p:=p+1;
  57. if p>lg[i] then lg[i]:=p;
  58. end;
  59. end;
  60. read(a);
  61. if a=1 then
  62. begin
  63. f[0,1,1]:=1;
  64. lf[0,1]:=1;
  65. f[1,1,1]:=0;
  66. lf[1,1]:=1;
  67. end
  68. else
  69. begin
  70. f[0,1,1]:=0;
  71. lf[0,1]:=1;
  72. f[1,1,1]:=1;
  73. lf[1,1]:=1;
  74. end;
  75. for i:=2 to n do
  76. begin
  77. read(a);
  78. if a=1 then
  79. begin
  80. f[1,i]:=f[0,i-1];
  81. lf[1,i]:=lf[0,i-1];
  82. add(f[1,i-1],g[i-1],lf[1,i-1],lg[i-1],f[0,i],lf[0,i]);
  83. f[0,i,1]:=f[0,i,1]+1;
  84. p:=1;
  85. while f[0,i,p]>=10 do
  86. begin
  87. f[0,i,p]:=f[0,i,p]-10;
  88. f[0,i,p+1]:=f[0,i,p+1]+1;
  89. p:=p+1;
  90. if p>lf[0,i] then lf[0,i]:=p;
  91. end;
  92. end
  93. else
  94. begin
  95. f[0,i]:=f[0,i-1];
  96. lf[0,i]:=lf[0,i-1];
  97. add(f[1,i-1],g[i-1],lf[1,i-1],lg[i-1],f[1,i],lf[1,i]);
  98. f[1,i,1]:=f[1,i,1]+1;
  99. p:=1;
  100. while f[1,i,p]>=10 do
  101. begin
  102. f[1,i,p]:=f[1,i,p]-10;
  103. f[1,i,p+1]:=f[1,i,p+1]+1;
  104. p:=p+1;
  105. if p>lf[1,i] then lf[1,i]:=p;
  106. end;
  107. end;
  108. end;
  109.  
  110. for i:=lf[0,n] downto 1 do
  111. write(f[0,n,i]);
  112. writeln;
  113. close(input);
  114. close(output);
  115. end.