您的位置:首页 > 其它

uva 10795

2013-08-15 22:18 92 查看
#include <cstdio>

using namespace std;

const int maxn = 65;
int begin[maxn], end[maxn];

int n;	

long long int hanoi(int *a, int n, int final){
	if(n == 0){ return 0; }
	if(a
 == final){ return hanoi(a, n - 1, final ); }
	return (hanoi(a, n - 1, 6 - final - a
) + (1LL << (n - 1)));	
}
					

int main(void)
{
	int kase = 1;			
	while(scanf("%d", &n) == 1 && n ){
		int i, final;
		long long int ret = 0;
		for(i = 1; i <= n; i++){ scanf("%d", begin + i); }
		for(i = 1; i <= n; i++){ scanf("%d", end + i);   }
		i = n;
		while(i >= 1 && begin[i] == end[i]){ --i; }
		if(i >= 1){
			final = 6 - begin[i] - end[i];
			ret = hanoi( begin, i - 1, final) + hanoi(end, i - 1, final) + 1;
		}
			printf("Case %d: %lld\n", kase++, ret);
	}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: