您的位置:首页 > 其它

BZOJ 1019: [SHOI2008]汉诺塔

2017-09-23 17:56 323 查看
二次联通门 : BZOJ 1019: [SHOI2008]汉诺塔

/*
BZOJ 1019: [SHOI2008]汉诺塔

我是代码的搬运工,啦啦啦
真心不明白QAQ
*/
#include <cstdio>
#define rg register
#define Max 35
typedef long long LL;
int g[3][Max], l[Max], q[Max]; LL f[3][Max];
int main (int argc, char *argv[])
{
int N; char t[5]; scanf ("%d", &N); rg int i, j; int x, y;
for (i = 0; i < 6; ++ i)
scanf ("%s", t), l[i] = t[0] - 'A', q[i] = t[1] - 'A';
f[0][1] = f[1][1] = f[2][1] = 1;
for (i = 0; i < 3; ++ i)
for (j = 0; j < 6; ++ j)
if (l[j] == i) { g[i][1] = q[j]; break; }
for (i = 2; i <= N; ++ i)
for (j = 0; j < 3; ++ j)
{
x = g[j][i - 1], y = 3 - j - x;
if (g[x][i - 1] == y) f[j][i] = f[j][i - 1] + 1 + f[x][i - 1], g[j][i] = y;
else f[j][i] = f[j][i - 1] + 2 + f[x][i - 1] + f[j][i - 1], g[j][i] = x;
}
printf ("%lld", f[0]
); return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: