对于人员,需要能够支持从一端出去,从另一端入。所以我们采用双端队列的形式存储人员数据。
对于物品,需要支持从一端弹出的操作,所以采用栈的形式存储。
接下来就按着题目的思路来模拟即可。
由于可能存在一直循环的可能,所以我们用cnt记录当前已经连续失配了多少次。超过n的最大值就break。
小红是一家知名企业的HR主管,为了提高员工的工作积极性,他经常会组织各种活动来丰富员工的业余生活。最近,他举办了一场员工抽奖活动,奖品分别是儿童绘本和雨伞。在活动中,每位员工都需要填写自己喜欢的奖品,并抽取一个获奖号码。活动进行得非常成功,员工们都参与热情高涨,最终产生了一批获奖者。
现在,小红需要让获奖员工领取奖品。但是,他发现每个员工都有自己喜欢的奖品,只会领取自己想要的那个奖品,因此他需要根据员工填写的喜好,分别提供儿童绘本和雨伞两种奖品,分别用数字 0 和 1 表示,每个员工都有自己喜欢的奖品(儿童绘本或雨伞),且只会领取自己喜欢的奖品。。
小红把奖品自下往上一件一件堆叠在一起,同时让员工站成一个队列,领取规则为:
现在给你两个长度相等的整数数组 persons 和 prizes ,其中 persons[i] 是初始队列里第 i 名员工喜欢的奖品( i=0 是队首位置), prizes[j] 是第 j 个奖品的类型( 0 表示最顶上)。
请返回无法取到自己喜欢的奖品的员工数量。
输入三行,第一行输入一个整数 n ,代表员工数量(奖品数量)
第二行n个整数,persons[i] 是初始队列里第 i 名员工喜欢的奖品( i=0 是队首位置)
第三行n个整数,prizes[j] 是第 j 个奖品的类型( 0 表示最顶上)。
数据范围:
输出无法取到自己喜欢的奖品的员工数量。
输入
5
0 1 1 0 1
1 0 0 1 0
输出
1
样例解释
队首的员工放弃最顶上的奖品,并回到队列的末尾,队列变为 persons=[1,1,0,1,0] 。
队首的员工拿走最顶上的奖品,并离开队列,队列变为 persons=[1,0,1,0] ,奖品为 prizes=[0,0,1,0] 。
队首的员工放弃最顶上的奖品,并回到队列的末尾,队列变为 persons=[0,1,0,1] 。
队首的员工拿走最顶上的奖品,并离开队列,队列变为 persons=[1,0,1] ,奖品为 prizes=[0,1,0] 。
队首的员工放弃最顶上的奖品,并回到队列的末尾,队列变为 persons=[0,1,1] 。
队首的员工拿走最顶上的奖品,并离开队列,队列变为 persons=[1,1] , 奖品为 prizes=[1,0] 。
队首的员工拿走最顶上的奖品,并离开队列,队列变为 persons=[1] ,奖品为 prizes=[0] 。
最后剩余的 1 名员工不喜欢最顶上的奖品,因此返回 1 。