1. 程式人生 > >51nod算法馬拉松28-a

51nod算法馬拉松28-a

高精 i++ tor operator esp ems 計算 sca ans

題解:水體一枚

按照貪心的思想求出是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; }

51nod算法馬拉松28-a