• UVa-101-木块问题


    这题用vector比较好写,我们设置对应的几个函数,然后进行相应的操作来简化代码,这样才不易出错。
    对于输入和操作来说我们经分析之后,可以看到最后一个操作时最原始的操作也就是不需要还原任意一个堆任意高度的操作,只需进行移动位置就可以了。
    对于其它的操作经观察得知,如果含有onto操作,那就要还原b之上的块,如果含有move,那就需要还原a之上的木块。
    所以我们对应对输入的操作也就出来了,我们只需要读到onto,就进行对b的还原,读到move,就进行a的还原。
    就这样就可以了。

    #include <cstdio>
    #include <string>
    #include <vector>
    #include <iostream>
    using namespace std;
    
    int n;
    const int maxn = 30;
    vector<int> pile[maxn];
    //找出木块所在的pile和height,以引用的形式返回
    void find_block(int a,int &p,int &h)
    {
        for (p = 0; p < n;p++) {
            for (h = 0; h < pile[p].size();h++) {
                if (pile[p][h]==a)
                    return;
            }
        }
    }
    //将p堆高度h之上的木块还原,不包括高度为h的块
    void clear_above(int p,int h)
    {
        for (int i = h + 1; i < pile[p].size();i++) {
            int b = pile[p][i];
            pile[b].push_back(b);
        }
        pile[p].resize(h + 1);
    }
    //把p堆高度h及之上的木块,移动到p2上
    void pile_onto(int p,int h,int p2)
    {
        for (int i = h; i < pile[p].size();i++) {
            pile[p2].push_back(pile[p][i]);
        }
        pile[p].resize(h);
    }
    
    void print()
    {
        for (int i = 0; i < n;i++) {
            printf("%d:", i);
            for (int j = 0; j < pile[i].size();j++)
                printf(" %d", pile[i][j]);
            printf("
    ");
        }
    }           
    
    
    int main()
    {
    
        int a,b;
        cin >> n;
        string s1, s2;
        for (int i = 0; i < n;i++)
            pile[i].push_back(i);
        while (cin>>s1>>a>>s2>>b) {
            int pa, pb, ha, hb;
            find_block(a, pa, ha);
            find_block(b, pb, hb);
            if (pa==pb)
                continue;
            if (s2=="onto")
                clear_above(pb, hb);
            if (s1=="move")
                clear_above(pa, ha);
            pile_onto(pa, ha, pb);
        }
        print();
    }
    
  • 相关阅读:
    Mysql 完整性约束
    Mysql 多表查询
    Mysql 数据表记录操作
    Mysql 数据库表操作
    Mysql 数据库操作
    sql语句规范
    Python IO模型
    csu-2018年11月月赛Round2-div1题解
    csu-2018年11月月赛Round2-div2题解
    Github新手使用学习详解
  • 原文地址:https://www.cnblogs.com/xyqxyq/p/10350120.html
Copyright © 2020-2023  润新知