当前位置: 代码迷 >> 综合 >> uva 10795 A Different Task
  详细解决方案

uva 10795 A Different Task

热度:31   发布时间:2023-12-06 08:36:39.0

题目:A Different Task


思路:递推。


注意:在用 long long 实现左移的位运算时,要写 1LL<<x,而不是1<<x。


代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <stack>
#include <queue>
#include <deque>
#include <set>
#include <cstring>
#include <map>
using namespace std;#define maxn 60
#define ll long long 
#define other(x,y) 6-x-yint n;
int a[maxn+5]={0},b[maxn+5]={0};ll f(int* p,int x,int fnl){if(x==0) return 0;if(p[x]==fnl) return f(p,x-1,fnl);return f(p,x-1,other(p[x],fnl))+(1LL<<x-1);
}int main() {int T=0;while(~scanf("%d",&n)&&n){for(int i=1;i<=n;i++) scanf("%d",&a[i]);for(int i=1;i<=n;i++) scanf("%d",&b[i]);int p=0;for(int i=n;i>=1;i--){if(a[i]!=b[i]) {p=i;break;}}printf("Case %d: ",++T);if(p){printf("%lld\n",f(a,p-1,other(a[p],b[p]))+f(b,p-1,other(a[p],b[p]))+1); } else printf("0\n");}return 0;
}


  相关解决方案