题目链接:https://www.luogu.org/problemnew/show/UVA101
这题码量稍有点大。。。
分析:
这道题模拟即可。因为考虑到所有的操作vector可最快捷的实现,所以数组动态vector。每一种情况分别考虑。
其他的见代码注释
部分过长的注释防在这里,请对照序号到代码中查看。
①:wa意为a的位置,记录当前a所在位置的序号。 wb意为b的位置,记录当前b所在位置的序号。 ca意为a的层数,记录当前a所在这堆积木中第几个。 cb意为b的层数,记录当前b所在这堆积木中第几个。
其他定义显而易见。
②:search遍历一遍所有位置所有积木,找到a或b后记录他们的位置和位置中第几个,相当于为后面的一个初始化吧。
③:此函数即move onto,按照题意模拟即可,之后④⑤⑥均如此,具体模拟步骤会详细说明。
代码:
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std
;
int wa
,wb
,ca
,cb
;
char s1
[10],s2
[10];
int a
,b
;
vector
<int>v
[30];
int n
;
void search()
{
for(int i
=0;i
<n
;i
++)
{
for(int j
=0;j
<v
[i
].size();j
++)
{
if(v
[i
][j
]==a
)
{
wa
=i
;
ca
=j
;
}
if(v
[i
][j
]==b
)
{
wb
=i
;
cb
=j
;
}
}
}
}
void moon()
{
for(int i
=ca
+1;i
<v
[wa
].size();i
++)
{
v
[v
[wa
][i
]].push_back(v
[wa
][i
]);
}
for(int i
=cb
+1;i
<v
[wb
].size();i
++)
{
v
[v
[wb
][i
]].push_back(v
[wb
][i
]);
}
v
[wa
].resize(ca
);
v
[wb
].resize(cb
+1);
v
[wb
].push_back(a
);
}
void moov()
{
for(int i
=ca
+1;i
<v
[wa
].size();i
++)
{
v
[v
[wa
][i
]].push_back(v
[wa
][i
]);
}
v
[wa
].resize(ca
);
v
[wb
].push_back(a
);
}
void pion()
{
for(int i
=cb
+1;i
<v
[wb
].size();i
++)
{
v
[v
[wb
][i
]].push_back(v
[wb
][i
]);
}
v
[wb
].resize(cb
+1);
for(int i
=ca
;i
<v
[wa
].size();i
++)
{
v
[wb
].push_back(v
[wa
][i
]);
}
v
[wa
].resize(ca
);
}
void piov()
{
for(int i
=ca
;i
<v
[wa
].size();i
++)
{
v
[wb
].push_back(v
[wa
][i
]);
}
v
[wa
].resize(ca
);
}
int main()
{
scanf("%d",&n
);
for(int i
=0;i
<n
;i
++)
{
v
[i
].push_back(i
);
}
while(1)
{
scanf("%s",s1
);
if(strcmp(s1
,"quit")==0)break;
scanf("%d%s%d",&a
,s2
,&b
);
search();
if(wa
==wb
)continue;
if(strcmp(s1
,"move")==0&&strcmp(s2
,"onto")==0)moon();
if(strcmp(s1
,"move")==0&&strcmp(s2
,"over")==0)moov();
if(strcmp(s1
,"pile")==0&&strcmp(s2
,"onto")==0)pion();
if(strcmp(s1
,"pile")==0&&strcmp(s2
,"over")==0)piov();
}
for(int i
=0;i
<n
;i
++)
{
printf("%d:",i
);
for(int j
=0;j
<v
[i
].size();j
++)
{
printf(" %d",v
[i
][j
]);
}
printf("\n");
}
return 0;
}
转载于:https://www.cnblogs.com/vercont/p/10210042.html
相关资源:JAVA上百实例源码以及开源项目