ccf--201703-2学生排队--python

题目

名称:学生排队
题目链接:http://118.190.20.162/view.page?gpid=T56

思路

使用两个字典,一个是学号映射到位置的字典,另一个是位置映射到学号的字典,通过查询和更新字典,完成学生的排队。

代码实现

#先通过学号,查询位置,看应该向哪里移动,然后两个字典的都要进行修改
#如果是向前移动,前面的若干人,位置减1,同时位置上的学号进行改变
#如果是向后移动,后面的若干人,位置加1,同时位置上的学号进行改变
loc2no = {}
no2loc = {}
stu_no = int(input())
num = int(input())
loc2no = {i:i for i in range(1,stu_no+1)}
no2loc = {i:i for i in range(1,stu_no+1)}
for i in range(num):
    no,move = map(int,input().split())
    if(move > 0):
        #向后移动
        loc = no2loc[no]
        for j in range(loc,loc+move):
            loc2no[j] = loc2no[j+1]
            no2loc[loc2no[j]] = j
        loc2no[loc+move] = no
        no2loc[no] = loc + move
    if (move < 0):
        # 向前移动
        loc = no2loc[no]
        for j in range(loc, loc + move,-1):
            loc2no[j] = loc2no[j - 1]
            no2loc[loc2no[j]] = j
        loc2no[loc + move] = no
        no2loc[no] = loc + move
n = 1
for i in loc2no:
    if(n < stu_no):
        print(loc2no[i],end=' ')
    else:
        print(loc2no[i],end='')
    n += 1
欢迎关注公众号,一起交流

ccf--201703-2学生排队--python_第1张图片

你可能感兴趣的:(ccf)