不知道哪里错了,求助!
#include"iostream"
#include"cstdio"
#include"cmath"
#include"algorithm"
#include"cstring"
using namespace std;
#define read(x) scanf("%d",&x)
#define MAXN 10005
#define ll unsigned long long
int k;
int f[MAXN],vis[MAXN],l[30],be[30];
int a[MAXN],b[MAXN];
char s[MAXN];
int cnt=0,sum=0;
ll ans1=1,ans2=0,ans3=0;
int v[30],c=0;
void init(int n){for(int i=1;i<=n;i++) vis[i]=0,f[i]=i;}
int getf(int u){return f[u]=(f[u]==u)?u:getf(f[u]);}
void merge(int u,int v){int t1=getf(u),t2=getf(v);if(t1!=t2) f[t2]=t1;}
int tran(char c){return c-'a'+1;}
int main()
{
read(k),be[1]=0;
for(int i=1;i<=k;i++) read(l[i]),be[i+1]+=be[i]+l[i];
scanf("%s",s);
int lens=strlen(s);
for(int i=0;i<lens;i++)
{
if(s[i]=='0') a[++cnt]=-1;
else if(s[i]=='1') a[++cnt]=0;
else
{
int op=tran(s[i]);
for(int j=1;j<=l[op];j++) a[++cnt]=be[op]+j;
}
}
cnt=0;
scanf("%s",s);
lens=strlen(s);
for(int i=0;i<lens;i++)
{
if(s[i]=='0') b[++cnt]=-1;
else if(s[i]=='1') b[++cnt]=0;
else
{
int op=tran(s[i]);
for(int j=1;j<=l[op];j++) b[++cnt]=be[op]+j;
}
}
init(be[k]+l[k]);
for(int i=1;i<=cnt;i++)
{
if((a[i]==0&&b[i]==-1)||(a[i]==-1&&b[i]==0)) return puts("0"),0;
else if((a[i]>=-1&&a[i]<=0)||(b[i]>=-1&&b[i]<=0)) continue;
merge(a[i],b[i]);
}
for(int i=1;i<=cnt;i++)
{
if(a[i]==0||a[i]==-1)
{
int now=getf(b[i]);
vis[now]=1;
}
else if(b[i]==0||b[i]==-1)
{
int now=getf(a[i]);
vis[now]=1;
}
}
for(int i=1;i<=be[k]+l[k];i++) if(f[i]==i&&!vis[i]) sum++;
for(int i=1;i<=sum;i++)
{
ans1=2ll*ans1,ans2=2ll*ans2,ans3=2ll*ans3;
if(ans1>=1e15) ans1-=1e15,ans2+=1ll;
if(ans2>=1e15) ans2-=1e15,ans3+=1ll;
}
if(ans3>=1)
{
cout<<ans3;
for(int i=1;i<=14;i++)
{
ll rt=pow(10,i);
v[++c]=(ans2%rt)/(rt/10);
}
for(int i=14;i>=1;i--) cout<<v[i];
c=0;
for(int i=1;i<=14;i++)
{
ll rt=pow(10,i);
v[++c]=(ans1%rt)/(rt/10);
}
for(int i=14;i>=1;i--) cout<<v[i];
}
else if(ans2>=1)
{
cout<<ans2;
for(int i=1;i<=14;i++)
{
ll rt=pow(10,i);
v[++c]=(ans1%rt)/(rt/10);
}
for(int i=14;i>=1;i--) cout<<v[i];
}
else cout<<ans1;
cout<<endl;
return 0;
}