我是靠谱客的博主 俭朴黑米,这篇文章主要介绍UVA 101 - The Blocks Problem,现在分享给大家,希望可以做个参考。

刘汝佳上的题目。

复制代码
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <cstdio> #include <vector> #include <iostream> using namespace std; vector<int> pile[25]; void find(const int n,int aim, int& b, int& g) { for(b=0;b<n;b++) for(g=0;g<pile[b].size();g++) if(pile[b][g] == aim) return; } void moveonto(int ab,int ag,int bb,int bg){ //归位a for(int i=ag+1;i<pile[ab].size();i++){ int num=pile[ab][i]; pile[num].push_back(num); }pile[ab].resize(ag+1); //归位b for(int i=bg+1;i<pile[bb].size();i++){ int num=pile[bb][i]; pile[num].push_back(num); }pile[bb].resize(bg+1); //放置a pile[bb].push_back( pile[ab][ag] ); //删去a pile[ab].resize(ag); } void moveover(int ab,int ag,int bb,int bg){ //归位a for(int i=ag+1;i<pile[ab].size();i++){ int num=pile[ab][i]; pile[num].push_back(num); }pile[ab].resize(ag+1); //放置a pile[bb].push_back( pile[ab][ag] ); //删去a pile[ab].resize(ag); } void pileonto(int ab,int ag,int bb,int bg){ //归位b for(int i=bg+1;i<pile[bb].size();i++){ int num=pile[bb][i]; pile[num].push_back(num); }pile[bb].resize(bg+1); //放置a for(int i=ag;i<pile[ab].size();i++){ pile[bb].push_back( pile[ab][i] ); }pile[ab].resize(ag); } void pileover(int ab,int ag,int bb,int bg){ //放置a for(int i=ag;i<pile[ab].size();i++){ pile[bb].push_back( pile[ab][i] ); }pile[ab].resize(ag); } int main(){ int a,b,n; scanf("%d",&n); string s1, s2; for(int i = 0; i < n; i++) pile[i].push_back(i); while(cin>>s1 && s1!="quit") { cin>>a>>s2>>b; int ab, ag, bb, bg; find(n,a,ab,ag);find(n,b,bb,bg); if(ab==bb) continue; if(s1=="move" && s2=="onto") moveonto(ab,ag,bb,bg); if(s1=="move" && s2=="over") moveover(ab,ag,bb,bg); if(s1=="pile" && s2=="onto") pileonto(ab,ag,bb,bg); if(s1=="pile" && s2=="over") pileover(ab,ag,bb,bg); } 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"); } }

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

最后

以上就是俭朴黑米最近收集整理的关于UVA 101 - The Blocks Problem的全部内容,更多相关UVA内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部