yoyouhappy的秘密花园
欢迎来到我的秘密花园^^
C++博客
首页
新随笔
新文章
联系
聚合
管理
posts - 16,comments - 33,trackbacks - 0
<
2007年8月
>
日
一
二
三
四
五
六
29
30
31
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
1
2
3
4
5
6
7
8
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(2)
给我留言
查看公开留言
查看私人留言
随笔分类
acm/icpc(6)
yoyo's dairy(2)
yoyo的解题报告(8)
学习笔记(7)
转载(3)
自言自语(1)
随笔档案
2008年1月 (2)
2007年11月 (1)
2007年10月 (1)
2007年8月 (4)
2007年7月 (7)
2007年6月 (1)
blog
yoyo在百度的小屋
C++ study
C++ preference
OJ
JOJ
POJ
STL学习
center of STL study
STL中文站
yoyo's link
youtube
搜索
最新评论
1. re: POJ 1002 487-3279
那是因为前面补0的原因! 比如 9 应该是 000-0009 而不是0-9
--buct
2. re: JOJ 1101 DNA Sorting
好
--lxq
3. re: POJ 1002 487-3279
评论内容较长,点击标题查看
--原版橘子皮
4. re: POJ 1018 Communication System
我觉得你的做法有问题.
--infinity
5. re: POJ 1088 滑雪[未登录]
@foxtail
请教 ^^
代码是不太优美,请提供一些建议 thx~
--yoyouhappy
阅读排行榜
1. C++中vector的简单用法 [zz](4504)
2. POJ 1002 487-3279(3138)
3. POJ 1088 滑雪(2471)
4. POJ 1018 Communication System(2198)
5. 七种qsort排序方法 -------------zz自http://acm.zjnu.cn/show.asp?tab=arithmetic&id=36(1227)
评论排行榜
1. POJ 1002 487-3279(6)
2. JOJ 1101 DNA Sorting(5)
3. POJ 1088 滑雪(5)
4. 七种qsort排序方法 -------------zz自http://acm.zjnu.cn/show.asp?tab=arithmetic&id=36(4)
5. JOJ 1034 Worm Turns(4)
JOJ 1034 Worm Turns
WA了一次,最后发现竟然是多次计算时没给result赋初值,改了以后就AC了~
题目是写一个超简化版的贪吃蛇,在50*50的矩阵中,起始位置是蛇头位于的(25,30),蛇尾在(25,11),蛇占20个格。蛇可以向E W N S四个方向移动,当然不能反向移动,也不能撞倒自己或者撞倒墙.
输入多组case,每组是一串字符,表示每次的移动方向.
输出是否能完成这些移动,如果不能,就判断是在第几次移动时撞倒自己还是墙.
我的思路是 在矩阵中,将蛇占据的位置用1标记,将蛇头到蛇尾的20个坐标存入一个vector,然后每次移动,先判断是否撞倒墙,如果没撞倒墙,就先将蛇尾删除,将旧蛇头的位置置0(新蛇头可以是旧蛇尾 ),再将新的蛇头存入vector,判断新的蛇头所在的位置是否为0,若为被占据,则置1,继续移动.
觉得自己写得很冗余,开始时只记录了蛇头和蛇尾的坐标,以为根据蛇头移动就可以判断蛇尾的移动,写着写着就发现问题了,临时加了个vector来存蛇的坐标,所以程序有点乱,也只有这样了,以后再改改吧~
我的AC代码:
1
#include
<
iostream
>
2
#include
<
vector
>
3
#include
<
string
>
4
using namespace std;
5
struct point
6
{
7
int
row;
8
int
col;
9
};
10
int
main()
11
{
12
int
i,j,n,index,result
=
1
;
13
string
moves;
14
char move;
15
point p;
16
vector
<
point
>
v;
17
while
(
1
)
18
{
19
result
=
1
;
20
cin
>>
n;
21
if
(n
==
0
)break;
22
23
int
s[
50
][
50
]
=
{
0
};
24
int
fristr
=
24
,fristc
=
29
,lastr
=
24
,lastc
=
10
;
25
cin
>>
moves;
26
for
(j
=
10
;j
<
30
;j
++
)
27
{
28
s[
24
][j]
=
1
;
29
p.row
=
24
;
30
p.col
=
j;
31
v.push_back(p);
32
}
33
for
(index
=
0
;index
<
n;index
++
)
34
{
35
move
=
moves[index];
36
if
(move
==
'
E')++fristc;
37
if
(move
==
'
W')--fristc;
38
if
(move
==
'
N')--fristr;
39
if
(move
==
'
S')++fristr;
40
if
(fristr
*
(fristr
-
49
)
>
0
||fristc
*
(fristc
-
49
)
>
0
)
41
{
42
cout
<<
"
The worm ran off the board on move
"
<<
index
+
1
<<
"
.
"
<<
endl;
43
result
=
0
;
44
break;
45
}
46
v.erase(v.begin());
47
p.row
=
fristr;
48
p.col
=
fristc;
49
v.push_back(p);
50
s[lastr][lastc]
=
0
;
51
lastr
=
v[
0
].row;
52
lastc
=
v[
0
].col;
53
if
(s[fristr][fristc])
54
{
55
cout
<<
"
The worm ran into itself on move
"
<<
index
+
1
<<
"
.
"
<<
endl;
56
result
=
0
;
57
break;
58
}
59
s[fristr][fristc]
=
1
;
60
}
61
if
(result)printf(
"
The worm successfully made all %d moves.\n
"
, n);
62
v.clear();
63
getchar()
64
}
65
}
66
posted on 2007-08-17 08:48
yoyouhappy
阅读(935)
评论(4)
编辑
收藏
引用
所属分类:
yoyo的解题报告
、
acm/icpc
FeedBack:
#
re: JOJ 1034 Worm Turns
2007-08-17 14:01 |
tb
蛇头如果与身体相撞 必然会形成一个矩形。可以根据输入的字符串判断出来。
但是在开始的时候(前20步)是个需要特别处理的情况
回复
更多评论
#
re: JOJ 1034 Worm Turns
2007-08-17 14:06 |
tb
再想了一下 不一定是矩形 但是在 东西 和 南北 方向上的位 肯定是0
回复
更多评论
#
re: JOJ 1034 Worm Turns
2007-08-17 14:09 |
tb
可以把输入分为两部分 一个只有南北 一个只有东西 (保持顺序)然后看位移是不是0
回复
更多评论
#
re: JOJ 1034 Worm Turns
2007-08-18 10:36 |
yoyouhappy
@tb
不太明白你的意思。。。。
位移为什么会是0呢,谁的位移为0?我有点糊涂了
回复
更多评论
刷新评论列表
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
POJ 1088 滑雪
POJ 1018 Communication System
暂时搬家
JOJ 1101 DNA Sorting
诡异阿~
JOJ 1034 Worm Turns
POJ 1002 487-3279
yoyo的假期作业
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
Priceline
Travel