zoukankan      html  css  js  c++  java
  • [UOJ #152]【UR #10】汉诺塔

    题目大意:有三个柱子,第一个柱子上有$n$个盘子(大的盘子可以在小的盘子上)。给出一个方案,使得最后盘子有序,从下到上依次变小。$nleqslant10^4$,操作次数$leqslant10^6$

    题解:二进制下基数排序。

    卡点:众多,如把$stack$写成$queue$,基数排序写成从高位到低位等等

    C++ Code:

    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    #include <stack>
    
    std::stack<int> s[3];
    int n, q[10010];
    int main() {
    	std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);
    	std::cin >> n;
    	for (int i = 1; i <= n; ++i) std::cin >> q[i];
    	for (int i = n; i; --i) s[0].push(q[i]);
    	std::cout << 28 * n << '
    ';
    	for (int i = 0, w; i < 14; ++i) {
    		while (!s[0].empty()) {
    			w = s[0].top();
    			std::cout << "1 " << 2 + (w >> i & 1) << '
    ';
    			s[1 + (w >> i & 1)].push(w);
    			s[0].pop();
    		}
    		while (!s[2].empty()) {
    			std::cout << "3 1
    ";
    			s[0].push(s[2].top());
    			s[2].pop();
    		}
    		while (!s[1].empty()) {
    			std::cout << "2 1
    ";
    			s[0].push(s[1].top());
    			s[1].pop();
    		}
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    vue小结
    ES6中的super关键字
    es5和es6
    雅虎工程师提供的CSS初始化示例代码
    移动端rem用法总结
    批量压缩图片
    cordova
    cordova 添加插件时报错相关问题
    JS 数组中对象去重 reduce 用法
    中间件笔录
  • 原文地址:https://www.cnblogs.com/Memory-of-winter/p/11351585.html
Copyright © 2011-2022 走看看