uva 101

木块问题,用vector保存木块堆,与书上代码差不多。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58

#include<string>
#include<vector>
#include<iostream>
using namespace std;

const int maxn=25+5;
vector<int>wood[maxn];
int n;

void (int a,int &h,int &w){
for(w=0;w<n;w++)
for(h=0;h<wood[w].size();h++)
if(wood[w][h]==a)return;
}

void reset(int a,int w,int h){
for(int i=h+1;i<wood[w].size();i++)
wood[wood[w][i]].push_back(wood[w][i]);
wood[w].resize(h+1);
}

void a_moveto_b(int a,int b,int ha,int wa,int wb){
for(int i=ha;i<wood[wa].size();i++)
wood[wb].push_back(wood[wa][i]);
wood[wa].resize(ha);

}

int main(){

//freopen("dataout.txt","w",stdout);
int a,b;
string str1,str2;
cin>>n;
for(int i=0;i<n;i++)wood[i].push_back(i);
while(cin>>str1>>a>>str2>>b&&str1[0]!='q'){
int wa,wb,ha,hb;
find(a,ha,wa);
find(b,hb,wb);
if(wa==wb)continue;
if(str1[0]=='m'){
reset(a,wa,ha);
if(str2[1]=='n')reset(b,wb,hb);
a_moveto_b(a,b,ha,wa,wb);
}
else{
if(str2[1]=='n')reset(b,wb,hb);
a_moveto_b(a,b,ha,wa,wb);
}
}
for(int i=0;i<n;i++){
printf("%d:",i);
for(int j=0;j<wood[i].size();j++)printf(" %d",wood[i][j]);
printf("n");
}
return 0;
}