题解:水体一枚
按照贪心的思想求出是2的k次方,然后高精度计算
代码:
#include<bits/stdc++.h> using namespace std; const int N=10005; int ans,n,a[N],b[N]; struct zz { int len,a[N]; void init() { memset(a,0,sizeof a); len=0; } void write(){for (int i=len;i;i--)printf("%d",a[i]);} zz operator *(const zz b) { zz h;h.init(); h.len=len+b.len-1; for (int i=1;i<=len;i++) for (int j=1;j<=b.len;j++) h.a[i+j-1]+=a[i]*b.a[j], h.a[i+j]+=h.a[i+j-1]/10,h.a[i+j-1]%=10; if (h.a[len+b.len])h.len++; return h; } }x,y; void ksm(int k) { x.a[1]=x.len=y.len=1; y.a[1]=2; while (k) { if (k%2==1)x=x*y; y=y*y; k/=2; } } int main() { scanf("%d",&n); for (int i=0;i<n;i++)scanf("%d",&a[i]); for (int i=0;i<n;i++)scanf("%d",&b[i]); for(int i=1;i<n;i++) for(int j=0;j<n;j++) if(a[i]==b[j]&&a[i-1]==b[j+1])ans++; ksm(ans); x.write(); return 0; }