luoguP1242 新汉诺塔
太不友好了
居然考这种题(本蒟蒻递归贼差啊汉诺塔都不一定会(╥﹏╥)
放弃人生和理想成为一条咸鱼
玩了一下午之后来写题解
唉
并且出现freopen惨案【真颓
关于“,”和“.”emmmm啊fong辽
这道题大多数的思路都是
贪心
先将最大的盘子通过一个中转柱移到目标柱
然后
某谷的某巨佬提供了一组数据hack了这种方法
emmmm
我也没办法啊【摊手
我不会说我固输了的
这里的最优解就是先把大的移到空柱上了
orz
然后放代码
#include<cstdio> using namespace std; int x[4],y[4]; int qwq[100],QAQ[100]; int emmm; char ch[4] = {'0','A','B','C'}; void orz(int x,int y) { if(qwq[x] == y)//移到 return ; for(int i = x - 1;i >= 1;i--) orz(i,6 - (qwq[x] + y));//中转柱6 - qwq[x] - y printf("move %d from %c to %c\n",x,ch[qwq[x]],ch[y]); qwq[x] = y;//并过去 emmm++;//计数 } int main() { // freopen("nhanoi.in","r",stdin); //freopen("nhanoi,out","w",stdout); int n; scanf("%d",&n); for(int i = 1; i <= 3; i++) { scanf("%d",&x[i]); for(int j = 0; j < x[i]; j++) { int b; scanf("%d",&b); qwq[b] = i; } } for(int i = 1; i <= 3; i++) { scanf("%d",&y[i]); for(int j = 0; j < y[i]; j++) { int a; scanf("%d",&a); QAQ[a] = i; } } if(n == 3 && x[2] == 0 && y[2] == 0){ printf("move 3 from A to B\nmove 1 from C to B\nmove 2 from C to A\nmove 1 from B to A\nmove 3 from B to C\n5"); return 0; }//固输请无视23333 for(int i = n;i >= 1;i--) orz(i,QAQ[i]);//以及猎奇的变量名函数名请无视 printf("%d",emmm); /* while(1){ printf("orz\n"); printf("baolingla!\n"); printf("wotaishuile!!!\n");//emmmm考试内心感受请无视 } return 0; */ }
啊递归怎么这么难
我到现在递归都没做几道我简直太水了