【华为机试题】 [Python] 流浪地球

题目

流浪地球
描述
流浪地球计划在赤道上均匀部署了N个转向发动机,按位置顺序编号为0~N-1。
1) 初始状态下所有的发动机都是未启动状态;
2) 发动机起动的方式分为“手动启动”和“关联启动”两种方式;
3) 如果在时刻1一个发动机被启动,下一个时刻2与之相邻的两个发动机就会被“关联启动”;
4) 如果准备启动某个发动机时,它已经被启动了,则什么都不用做;
5) 发动机0与发动机N-1是相邻;
地球联合政府准备挑选某些发动机在某些时刻进行“手动启动”,当然最终所有的发动机都会被启动。
哪些发动机最晚被启动呢?

输入描述:
第一行两个数字N和E,中间有空格
N代表部署发动机的总个数,E代表计划手动启动的发动机总个数
1

代码

class Solution:
    def func(self):
        N, E = list(map(int,input("N E:").split()))
        plan_dict = {}
        item_dict = dict(zip(list(range(N)), [False]*N))
        for i in range(E):
            plan_str = input('Plan=>(time num):')
            [p_time, item_num] = list(map(int,plan_str.split()))
            if p_time not in plan_dict.keys():
                plan_dict[p_time] = [item_num]
            else:
                plan_dict[p_time].append(item_num)
        p_time = 0
        while plan_dict:
            ans_num = 0
            ans_item_num = []
            for item_num in plan_dict[p_time]:
                ans_num += 1
                ans_item_num.append(item_num)
                item_dict[item_num] = True
                left_item_num = item_num-1 if item_num - 1 >= 0 else N-1
                right_item_num = item_num+1 if item_num + 1 <= N-1 else 0

                if not item_dict[left_item_num]:
                    if p_time+1 not in plan_dict:
                        plan_dict[p_time+1] = [left_item_num]
                    else:
                        if left_item_num not in plan_dict[p_time+1]:
                            plan_dict[p_time+1].append(left_item_num)

                if not item_dict[right_item_num]:
                    if p_time+1 not in plan_dict:
                        plan_dict[p_time+1] = [right_item_num]
                    else:
                        if right_item_num not in plan_dict[p_time+1]:
                            plan_dict[p_time+1].append(right_item_num)
            del plan_dict[p_time]
            p_time+=1
            # print(ans_num, '=>', ans_item_num)
        return ans_num, ' '.join(map(str,ans_item_num))
s = Solution()
ans = s.func()
print(ans[0])
print(ans[1])

你可能感兴趣的:(华为,华为,python,算法,流浪地球)