UVa101(模拟+基础数据结构vector)

来源:互联网 发布:嵌入式软件开发技术 编辑:程序博客网 时间:2024/06/11 16:25

//思路:找到4中命令的基础操作,模拟


AC源码:

#include <cstdio>#include <string>#include <vector>#include <iostream>using namespace std;#define LOCconst int MAXN=30;int n;vector<int> pile[MAXN];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 ;}}}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);}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("\n");}}int main(){#ifdef LOCALfreopen("data.in","r",stdin);freopen("data.out","w",stdout);#endifint 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();return 0;}


原创粉丝点击