问题描述
链接:https://www.nowcoder.com/questionTerminal/9407e24a70b04fedba4ab3bd3ae29704?answerType=1&f=discussion
小易有一个古老的游戏机,上面有着经典的游戏俄罗斯方块。因为它比较古老,所以规则和一般的俄罗斯方块不同。
荧幕上一共有 n 列,每次都会有一个 1 x 1 的方块随机落下,在同一列中,后落下的方块会叠在先前的方块之上,当一整行方块都被占满时,这一行会被消去,并得到1分。
有一天,小易又开了一局游戏,当玩到第 m 个方块落下时他觉得太无聊就关掉了,小易希望你告诉他这局游戏他获得的分数。
输入描述:
第一行两个数 n, m。第二行 m 个数,c1, c2, ... , cm , ci 表示第 i 个方块落在第几列
其中 1 <= n, m <= 1000, 1 <= ci <= n
输出描述:
小易这局游戏获得的分数
示例:
思路及解答
我的想法:如下图。n 是游戏中的列数,那么可以设立 n 个队列(因为是先入先出),数字为 1 则入第 1 个队列,数字为 i 则入第 i 个队列……,若所有队列都不为空时,则弹出全部队列的一个元素,并且分值加 1 , 直到 m 个元素分配完,看分值是几。(此方法很麻烦!舍弃)
# 计算各元素的个数,其中取最小值,就是该人的分数。
# 用了哈希表来计算元素个数。注意:哈希表只是把现有的元素存进去,并计算个数,但如果有元素没出现,那么一定就是 0 分。
import sys
n, m = map(int, sys.stdin.readline().strip().split())
nums = sys.stdin.readline().strip().split()
nums = [int(i) for i in nums]
hashmap = {}
for i in range(m):
if nums[i] not in hashmap.keys():
hashmap[nums[i]] = 1
else:
hashmap[nums[i]] += 1
if len(hashmap) == n: # 此次判断条件是防止结果预计为 0 的情况,但 hashmap.values() 里面不存在 0 元素,所以会出错。
print(min(hashmap.values()))
else:
print(0)
知识点
1. 笔试题中输入、输出那些事
(1) 单行多个输入:
import sys
for line in sys.stdin:
a = line.split()
# a = [int(tmp) for tmp in a]
# 假如输入: 2 3 4,那么输出 ['2', '3', '4']
# 如果是多个元素,那么不能用 int() 来变成整数,也不能用 map(int, ...) 来变成整数,需要用 nums = [int(tmp) for tmp in nums] 通过 for 循环一个一个元素的变。
(2) 多行多个输入:
import sys
# 读取第一行的元素 n
n = int(sys.stdin.readline().strip()) # 单个元素直接用 int() 变换
# 获取第二行的两个元素 x, y
x, y = map(int, sys.stdin.readline().strip().split()) # 两个元素用 map(int, ...)变换
# 读取下面 m 行元素
for i in range(m):
nums = sys.stdin.readline().strip().split() # 多个元素用 for 循环一个一个变换
nums = [int(tmp) for tmp in nums]
2. Python 中 str.strip() 的用法
用法:删除字符串的头、尾指定的元素,默认为空格或换行。
注意:只能删除头和尾的元素,中间元素不可以!
(参考:Python strip()方法)
3. list 中int 型和 str 型的相互转换
# 第一种:使用 map() 函数
1. str --> int
results = ['1','2','3']
results = list(map(int, results))
2. int --> str
results = [1,2,3]
results = list(map(str, results))
# 第二种:使用 for 循环
1. str --> int
results = ['1','2','3']
results = [int(i) for i in results]
2. int --> str
results = [1,2,3]
results = [str(i) for i in results]