记录编号 22211 评测结果 AAAAAAAAAA
题目名称 拯救 最终得分 100
用户昵称 Gravatar苏轼 是否通过 通过
代码语言 C++ 运行时间 0.065 s
提交时间 2010-11-17 17:50:32 内存使用 6.42 MiB
显示代码纯文本
  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. using namespace std;
  5. const int MAXN=1005;
  6.  
  7. typedef long long LL;
  8.  
  9. struct High
  10. {
  11. int len,a[400];
  12. High(){reset();}
  13. void reset(){memset(a,0,sizeof(a));len=1;}
  14. };
  15.  
  16. High operator + (High a,const int &num)
  17. {
  18. if (num==1)
  19. {
  20. a.a[0]+=1;
  21. int i;
  22. for(i=0;a.a[i]>=10;i++)
  23. {
  24. a.a[i+1]+=1;
  25. a.a[i]-=10;
  26. }
  27. if (a.a[i]&&i+1>a.len)
  28. a.len=i+1;
  29. }
  30. else printf("wrong!\n");
  31. return a;
  32. }
  33.  
  34. High operator + (const High &a,const High &b)
  35. {
  36. High ans;
  37. ans.len=max(a.len,b.len);
  38. for(int i=0;i<ans.len;i++)
  39. {
  40. ans.a[i]+=a.a[i]+b.a[i];
  41. ans.a[i+1]=ans.a[i]/10;
  42. ans.a[i]%=10;
  43. }
  44. if (ans.a[ans.len])
  45. ans.len++;
  46. return ans;
  47. }
  48.  
  49. int a[MAXN];
  50. int N;
  51. High d[MAXN][2],g[MAXN],f[MAXN];
  52.  
  53. void print(const High a)
  54. {
  55. for(int i=a.len-1;i>=0;i--)
  56. printf("%d",a.a[i]);
  57. printf("\n");
  58. }
  59.  
  60. void print(const LL a)
  61. {
  62. printf("%lld\n",a);
  63. }
  64.  
  65. int main()
  66. {
  67. freopen("savey.in","r",stdin);
  68. freopen("savey.out","w",stdout);
  69. scanf("%d",&N);
  70. for(int i=1;i<=N;i++)
  71. scanf("%d",a+i);
  72. for(int i=1;i<=N;i++)
  73. {
  74. g[i]=g[i-1]+1+g[i-1];
  75. // print(g[i]);
  76. }
  77. if (a[1]) d[1][0].a[0]=1;
  78. else d[1][1].a[0]=1;
  79. // if (a[1]) d[1][0]=1;
  80. // else d[1][1]=1;
  81. for(int i=1;i<=N;i++)
  82. {
  83. if (a[i])
  84. d[i][0]=d[i-1][1]+1+g[i-1],
  85. d[i][1]=d[i-1][0];
  86. else
  87. d[i][0]=d[i-1][0],
  88. d[i][1]=d[i-1][1]+1+g[i-1];
  89. }
  90. print(d[N][0]);
  91. // printf("%lld\n",d[N][0]);
  92. return 0;
  93. }