【keda编程】#P1256. 小可的手机 c++ 题目描述
集训的某天中午,小可趁着午休跑到大街上溜达,忽然乌云密布,预示着一场暴雨即将到来,吓得小可急忙跑回集训营,幸运的是,暴雨在小可飞奔到集训营楼下的下一秒才开始下。
“呼~”,就在小可庆幸没被突至的暴雨淋湿的时候,在二楼刚打扫完卫生的小达将一盆污水朝楼下泼了出去,真没素质,十分精准的命中了小可,还是没躲过被淋湿,衣服湿透的小可刚想上楼找小达算账,却想起衣服口袋里还有一个存储着重要资料的手机
“糟糕”,小可的手机进水了
小可的手机内部的电路板可以被看做是一个
�
∗
�
n∗m的二维平面,我们用三种符号简单的表示小可手机的电路板构造
0:表示该位置上没有电子元件
1:表示该位置上有电子元件
*:表示水滴
正常情况下,水滴会沿着重力方向一直流动,直到流出边界,一旦水滴经过任意一个电子元件,小可的手机就会报废。
小可急忙把手机转了方向,想改变重力方向改变水滴的流向,我们用sxzy四个字符分别代表上下左右
小可想知道,在这种方向下,他的手机会不会报废
输入格式
第一行为两个正整数
�
,
�
n,m和一个字符
�
ℎ
ch,代表着小可手机的简易电路板的大小,和小可手机的重力方向
接下来
�
n 行每行
�
m个字符,代表着电路板上的构造情况
输出格式
若小可的手机会报废则输出Over,不会则输出Fine
输入数据 1
3 3 x
0*0
000
111
输出数据 1
Over
第一行第二列的水滴向下流到了第三行第二列的电子原件上,报废
输入数据 2
3 3 y
000
*01
000
输出数据 2
Over
第二行第一列的水滴向右流到了第二行第三列的电子原件上,报废
输入数据 3
3 3 s
0*0
000
111
输出数据 3
Fine
第一行第二列的水滴向上流出边界,未经过电子元件,没报废
数据范围与约定
对于全部数据,
1
≤
�
,
�
≤
100
1≤n,m≤100
【以下回答由 GPT 生成】
首先我们需要确定水滴的初始位置。根据重力方向,如果方向是x,则水滴初始位置在第一行最底部的空位置上;如果方向是y,则水滴初始位置在第一列最右边的空位置上;如果方向是s,则水滴初始位置在最后一行的空位置上。
然后我们需要逐行(或逐列)更新水滴的位置,如果水滴碰到了电子元件,就输出"Over"。
以下是解决问题的具体步骤和代码实现:
start_x
, start_y
):n-1
, y),其中y是第一行中的一个空位置(值为0)的列索引。m-1
),其中x是第一列中的一个空位置(值为0)的行索引。n-1
, x),其中x是最后一行中的一个空位置(值为0)的列索引。start_x
的行数为0。start_y
的列数为0。start_x
的行数为n-1
。下面是针对给定问题的Python代码实现:
n, m = map(int, input().split())
c = input()
board = []
for _ in range(n):
row = input()
board.append(row)
if c == 'x':
for y in range(m):
if board[0][y] == '0':
start_x = n - 1
start_y = y
break
elif c == 'y':
for x in range(n):
if board[x][0] == '0':
start_x = x
start_y = m - 1
break
elif c == 's':
for y in range(m):
if board[n-1][y] == '0':
start_x = n - 1
start_y = y
break
if c == 'x':
while start_x > 0:
start_x -= 1
if board[start_x][start_y] == '1':
print("Over")
exit()
elif c == 'y':
while start_y > 0:
start_y -= 1
if board[start_x][start_y] == '1':
print("Over")
exit()
elif c == 's':
while start_x < n-1:
start_x += 1
if board[start_x][start_y] == '1':
print("Over")
exit()
print("Fine")
这样,我们会依次遍历水滴的路径,并在遇到电子元件时输出"Over"。如果循环结束时没有输出"Over",则说明水滴没有报废,输出"Fine"。
【相关推荐】
6也