#include<bits/stdc++.h>
using namespace std;
const int maxn = 60 + 10;
int n,start[maxn],finish[maxn];
long long f(int* P,int i,int final_){
if(i==0) return 0;
else if(P[i]==final_) return f(P,i-1,final_);
return f(P,i-1,6-P[i]-final_) + (1LL << (i-1));
}
int main()
{
int kase=0;
while(scanf("%d",&n)==1&&n){
for(int i=1;i<=n;i++) scanf("%d",&start[i]);
for(int i=1;i<=n;i++) scanf("%d",&finish[i]);
int k=n;
while(k >= 1&&start[k]==finish[k]) k--;
long long ans=0;
if(k>=1){
int other = 6-start[k]-finish[k];
ans = f(start,k-1,other) + f(finish,k-1,other) + 1;
}
printf("Case %d: %lld\n",++kase, ans);
}
return 0;
}
原来做过的一道题,有点类似状态转移吧
10795 - A Different Task
最新推荐文章于 2019-04-11 17:58:14 发布