• UVA 101


    刘汝佳上的题目。

     1 #include <cstdio>
     2 #include <vector>
     3 #include <iostream>
     4 using namespace std;
     5 vector<int> pile[25];
     6 void find(const int n,int aim, int& b, int& g) {
     7     for(b=0;b<n;b++)
     8         for(g=0;g<pile[b].size();g++) if(pile[b][g] == aim) return;
     9 }
    10 void moveonto(int ab,int ag,int bb,int bg){
    11     //归位a 
    12     for(int i=ag+1;i<pile[ab].size();i++){
    13         int num=pile[ab][i];
    14         pile[num].push_back(num);
    15     }pile[ab].resize(ag+1);
    16     
    17     //归位b 
    18     for(int i=bg+1;i<pile[bb].size();i++){
    19         int num=pile[bb][i];
    20         pile[num].push_back(num);
    21     }pile[bb].resize(bg+1);
    22     
    23     //放置a
    24     pile[bb].push_back( pile[ab][ag] );
    25     
    26     //删去a
    27     pile[ab].resize(ag);
    28 }
    29 void moveover(int ab,int ag,int bb,int bg){
    30     //归位a 
    31     for(int i=ag+1;i<pile[ab].size();i++){
    32         int num=pile[ab][i];
    33         pile[num].push_back(num);
    34     }pile[ab].resize(ag+1);
    35     
    36     //放置a 
    37     pile[bb].push_back( pile[ab][ag] );
    38     
    39     //删去a
    40     pile[ab].resize(ag);
    41 }
    42 void pileonto(int ab,int ag,int bb,int bg){
    43     //归位b 
    44     for(int i=bg+1;i<pile[bb].size();i++){
    45         int num=pile[bb][i];
    46         pile[num].push_back(num);
    47     }pile[bb].resize(bg+1);
    48     
    49     //放置a
    50     for(int i=ag;i<pile[ab].size();i++){
    51         pile[bb].push_back( pile[ab][i] );
    52     }pile[ab].resize(ag);
    53 }
    54 void pileover(int ab,int ag,int bb,int bg){
    55     //放置a
    56     for(int i=ag;i<pile[ab].size();i++){
    57         pile[bb].push_back( pile[ab][i] );
    58     }pile[ab].resize(ag);
    59 }
    60 int main(){
    61     int a,b,n;
    62     scanf("%d",&n);
    63     string s1, s2;
    64     for(int i = 0; i < n; i++) pile[i].push_back(i);
    65     while(cin>>s1 && s1!="quit") {
    66         cin>>a>>s2>>b;
    67         int ab, ag, bb, bg;
    68         find(n,a,ab,ag);find(n,b,bb,bg);
    69         if(ab==bb) continue;
    70         if(s1=="move" && s2=="onto") moveonto(ab,ag,bb,bg);
    71         if(s1=="move" && s2=="over") moveover(ab,ag,bb,bg);
    72         if(s1=="pile" && s2=="onto") pileonto(ab,ag,bb,bg);
    73         if(s1=="pile" && s2=="over") pileover(ab,ag,bb,bg);
    74     }
    75     for(int i=0;i<n;i++){
    76         printf("%d:",i);
    77         for(int j=0;j<pile[i].size();j++) printf(" %d",pile[i][j]);
    78         printf("
    ");
    79     }
    80 }

    刘汝佳书上的做法明显更加精简……不过刚学STL……老老实实的把四种行为做出来比较靠谱……

  • 相关阅读:
    #ifdef的用法
    修改WordPress中上传附件2M大小限制的方法/php+iis上传附件默认大小修改方法
    没有找到libufun.lib,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题。
    JAVA安卓和C# 3DES加密解密的兼容性问题
    使用 Repeater 控件,每隔N条数据输出另外的格式
    Forms表单登陆,动态获取web.config里面的cookies配置
    SQL Server中索引使用及维护
    动态绑定easyui datagrid列名
    Spring Hibernate多数据源配置
    SSH异常处理
  • 原文地址:https://www.cnblogs.com/dilthey/p/6804186.html
Copyright © 2020-2023  润新知