本文共 1094 字,大约阅读时间需要 3 分钟。
f[i][j]表示i上有j个盘子移到g[i][j]上的步数
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #define M 20210 #define ll long long11 #define Mo 99824435312 #define pa pair 13 using namespace std;14 ll read()15 {16 char ch=getchar();17 ll x=0,f=1;18 for(;ch<'0'||ch>'9';ch=getchar())19 if(ch=='-')20 f=-1;21 for(;ch>='0'&&ch<='9';ch=getchar())22 x=x*10+ch-'0';23 return x*f;24 }25 int n,g[4][M],p[M];26 ll f[4][M];27 int main()28 {29 n=read();30 for(int i=1;i<=6;i++)31 {32 char ch[10];33 scanf("%s",ch);34 int a1=ch[0]-'A'+1,a2=ch[1]-'A'+1;35 if(p[a1])36 continue;37 p[a1]=1;38 g[a1][1]=a2;39 f[a1][1]=1;40 }41 for(int i=2;i<=n;i++)42 for(int j=1;j<=3;j++)43 {44 int y=g[j][i-1],k=1+2+3-j-g[j][i-1];45 if(g[y][i-1]==k)46 {47 f[j][i]=f[j][i-1]+1+f[y][i-1];48 g[j][i]=k;49 }50 else51 {52 g[j][i]=y;53 f[j][i]=f[j][i-1]+1+f[y][i-1]+1+f[j][i-1];54 }55 }56 printf("%lld\n",f[1][n]);57 return 0;58 }59
转载于:https://www.cnblogs.com/xiw5/p/5656587.html