历年题解 CCF CSP历年题解(python)
样例输入:
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 1 0 0 0
1 1 1 0 0 0 1 1 1 1
0 0 0 0 1 0 0 0 0 0
0 0 0 0
0 1 1 1
0 0 0 1
0 0 0 0
3
题目链接:201604-2俄罗斯方块
问题分析: 将小方块的板块从方格图顶部开始向下落,遇到方块(1)停止下落,未遇到方块则放置到下边界
满分例程:
s = [] # 15*10方格网
b = [] # 4*4加入板块
for i in range(15):
s += list(map(int, input().split()))
for i in range(30): # 底部外加3行判断板块的1、2、3行
s += [0]
for i in range(4):
b += map(int, input().split())
n = int(input())
bl = False # 用于终止循环,终止方块下落
h = -1
for i in range(15): # 方格图的15行
for j in range(4): # 遍历板块 行
for k in range(4): # 遍历 列
if s[(i + j) * 10 + n - 1 + k] + b[j * 4 + k] == 2:
bl = True
h = i - 1 # 记录下落最后位置
break
if bl == True:
break
if bl == True:
bl = False
break
if h == -1: # 下落过程碰不到方块,直接落到下边界
for i in range(3, -1, -1):
for j in range(4):
if b[i * 4 + j] == 1:
h = 15 - i - 1
bl = True
break
if bl == True:
break
for i in range(4): # 在方格图中用板块替代
for j in range(4):
s[(i + h) * 10 + n - 1 + j] += b[i * 4 + j]
for i in range(15):
for j in range(10):
if j == 0:
print(s[i * 10 + j], end='')
else:
print('', s[i * 10 + j], end='')
if i != 14:
print()