记录编号 |
22211 |
评测结果 |
AAAAAAAAAA |
题目名称 |
拯救 |
最终得分 |
100 |
用户昵称 |
苏轼 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.065 s |
提交时间 |
2010-11-17 17:50:32 |
内存使用 |
6.42 MiB |
显示代码纯文本
- #include <cstdio>
- #include <cstring>
- #include <algorithm>
- using namespace std;
- const int MAXN=1005;
-
- typedef long long LL;
-
- struct High
- {
- int len,a[400];
- High(){reset();}
- void reset(){memset(a,0,sizeof(a));len=1;}
- };
-
- High operator + (High a,const int &num)
- {
- if (num==1)
- {
- a.a[0]+=1;
- int i;
- for(i=0;a.a[i]>=10;i++)
- {
- a.a[i+1]+=1;
- a.a[i]-=10;
- }
- if (a.a[i]&&i+1>a.len)
- a.len=i+1;
- }
- else printf("wrong!\n");
- return a;
- }
-
- High operator + (const High &a,const High &b)
- {
- High ans;
- ans.len=max(a.len,b.len);
- for(int i=0;i<ans.len;i++)
- {
- ans.a[i]+=a.a[i]+b.a[i];
- ans.a[i+1]=ans.a[i]/10;
- ans.a[i]%=10;
- }
- if (ans.a[ans.len])
- ans.len++;
- return ans;
- }
-
- int a[MAXN];
- int N;
- High d[MAXN][2],g[MAXN],f[MAXN];
-
- void print(const High a)
- {
- for(int i=a.len-1;i>=0;i--)
- printf("%d",a.a[i]);
- printf("\n");
- }
-
- void print(const LL a)
- {
- printf("%lld\n",a);
- }
-
- int main()
- {
- freopen("savey.in","r",stdin);
- freopen("savey.out","w",stdout);
- scanf("%d",&N);
- for(int i=1;i<=N;i++)
- scanf("%d",a+i);
- for(int i=1;i<=N;i++)
- {
- g[i]=g[i-1]+1+g[i-1];
- // print(g[i]);
- }
- if (a[1]) d[1][0].a[0]=1;
- else d[1][1].a[0]=1;
- // if (a[1]) d[1][0]=1;
- // else d[1][1]=1;
- for(int i=1;i<=N;i++)
- {
- if (a[i])
- d[i][0]=d[i-1][1]+1+g[i-1],
- d[i][1]=d[i-1][0];
- else
- d[i][0]=d[i-1][0],
- d[i][1]=d[i-1][1]+1+g[i-1];
- }
- print(d[N][0]);
- // printf("%lld\n",d[N][0]);
- return 0;
- }