UVA - 10474解题报告

这道题思路很好理解,一开始没有定义任何别的函数,所有操作都直接在main方法里直接做,长度四千多,一直runtime error,之后将一些操作放到函数中,AC,我连思路都没有变。。。。。吐槽。。。。

#include<bits/stdc++.h>
using namespace std;
vector<int>v[30];
int n;
//记录所在vector数组下标以及在数组中的位置。
void findv(int a,int&a_position,int& a_start){
    for(int i=0;i<n;i++)
        for(int j=0;j<v[i].size();j++)
            if(v[i][j]==a){
                a_position=i;
                a_start=j;
                return;
            }
}
//移除b顶部元素,及放到应有位置
void movetop(int b,int b_position,int b_start){
    for(int i=b_start+1;i<v[b_position].size();i++)
        v[v[b_position][i]].push_back(v[b_position][i]);
    v[b_position].erase(v[b_position].begin()+b_start+1,v[b_position].end());
}
//将a之上的所有东西放到b所在的数组最后
void onto(int a_position,int a_start,int b_position){
    v[b_position].insert(v[b_position].end(),v[a_position].begin()+a_start,v[a_position].end());
}
//删除a元素,及a之上的元素
void mydelete (int a_position,int a_start){
    v[a_position].erase(v[a_position].begin()+a_start,v[a_position].end());
}


int main(){
    cin>>n;
    for(int i=0;i<n;i++)
        v[i].push_back(i);

    string s1,s2;
    int a,b;
    while(cin>>s1){
        if(s1=="quit")
            break;
        cin>>a>>s2>>b;
        int a_position,a_start,b_position,b_start;
        findv(a,a_position,a_start);
        findv(b,b_position,b_start);
        if(a_position==b_position)
            continue;
        if(s1=="move"){
            movetop(a,a_position,a_start);
            if(s2=="onto"){
                movetop(b,b_position,b_start);
            }
            onto(a_position,a_start,b_position);
            mydelete(a_position,a_start);
        }
        if(s1=="pile"){
            if(s2=="onto"){
                movetop(b,b_position,b_start);
                onto(a_position,a_start,b_position);
            }
            else{
                onto(a_position,a_start,b_position);
            }
            mydelete(a_position,a_start);
        }
    }
    for(int i=0;i<n;i++){
        cout<<i<<":";
        for(int j=0;j<v[i].size();j++)
            cout<<" "<<v[i][j];
        cout<<endl;
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/chenyume/article/details/81223997
今日推荐