题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1970
分析:高精度写的好累。。好久没写了。。
代码:
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const unsigned long long int ONE=1,ten=10;
const int Tmax=1005;
char ch;
long long int ans[Tmax],tmp[Tmax];
void build(long long int x)
{
int i=1;
tmp[0]=1;
tmp[1]=x;
while(tmp[i]>=ten)
{
tmp[i+1]=tmp[i]/ten;
tmp[i]%=ten;
i++;
}
tmp[0]=i;
if(tmp[i]==0) tmp[0]--;
return;
}
void mul(long long int x)
{
int i,len=tmp[0];
for(i=1;i<=len;i++)
tmp[i]*=x;
for(i=1;i<=len;i++)
{
tmp[i+1]+=tmp[i]/ten;
tmp[i]%=ten;
}
i=len+1;
while(tmp[i]>=ten)
{
tmp[i+1]+=tmp[i]/ten;
tmp[i]%=ten;
i++;
}
tmp[0]=i;
if(tmp[i]==0) tmp[0]--;
return;
}
void add()
{
int i,len=max(ans[0],tmp[0]);
for(i=1;i<=len;i++)
{
ans[i]+=tmp[i];
ans[i+1]+=ans[i]/ten;
ans[i]%=10;
}
i=len+1;
while(ans[i]>=10)
{
ans[i+1]+=ans[i]/ten;
ans[i]%=ten;
i++;
}
ans[0]=i;
if(ans[ans[0]]==0) ans[0]--;
return;
}
void dfs(long long int k)
{
scanf("%c",&ch);
if(ch=='2'){
dfs(k-1);
dfs(k-1);
dfs(k-1);
dfs(k-1);
}
else if(ch=='0'){
memset(tmp,0,sizeof(tmp));
build(ONE<<k);
mul(ONE<<k);
add();
}
return;
}
int main()
{
long long int k;
scanf("%lld",&k);
getchar();
dfs(k);
for(int i=1;i<=ans[0];i++)
printf("%d",ans[ans[0]-i+1]);
return 0;
}