题目
由于考场上只剩下半个小时了,看这题目也有点难,就放弃了,现在有时间了,复盘了下。发现如果不太了解区块链,一开始真的连题目都看不懂,看了半天才看懂这题目啥意思。
简单的说就是,有n个节点,每个节点都有一条主链,初始都是长度为1,只有一个创世块0。这n个节点通过m条边相连接。输入的命令有两种,一种是创建新块的命令,如a b c,表示节点a在时间b时在主链尾端加上新块c;另一种是查询命令,如a b,表示查询节点a在时间b时的主链。还有在节点更新了主链时要发送自己的主链给它的邻居。而节点更新有两种情况,一是创建新块,二是接受邻居的链。
题目大致就是如此了,详细的可以自己看看上面的原题。这题是一道典型的模拟题,看懂了题意代码就好写了。但自己python学的不太好,写的时候忘了python的列表和字典的直接赋值是浅拷贝,折腾了一个多小时。
代码
from copy import deepcopy
n,m=map(int,input().split())
G={
}#邻接表
point={
}#节点状态
command=[]#存储消息传递命令
for i in range(n):#节点状态初始化
point[i+1]=[1,[0]]
for i in range(m):
G[input()]=1
t,k=map(int,input().split())
def addcom(sr):#添加更新命令
temp = []
for i in range(n):
if G.get(sr[0] + ' ' + str(i + 1), None) or G.get(str