Description
复旦大学食堂提供了精美的早餐,其中包含有包子和馒头,分别用数字0和1表示。所有取餐的学生站在一个队列里面,每一个学生要么喜欢包子要么喜欢馒头。食堂里包子和馒头的总数和学生的数量一样。
所有的包子和馒头都放在一个个摞起来的笼屉里面(每个笼屉里放一个包子或一个馒头,每次只能取最顶部的笼屉),每一轮:
(1)如果队列最前面的学生喜欢顶部笼屉里的早餐,那么会拿走并离开队列。
(2)否则,这名学生会重新排队。
这个过程一直持续到没有学生喜欢顶部笼屉的早餐为止。
现在给出学生和早餐的相关信息,求出无法吃到早餐的学生的数量。
Input
第一行输入一个整数T,表示有T组输入。
接下来每组数据首先输入一个整数M,表示学生的数量和早餐的数量,1<=M<=100。
接下来一行由0和1组成,表示学生的初始队列,第i个位置(i=0是队列开始的位置)表示第i个学生对早餐的喜好。
接下里一行由0和1组成,表示一个个笼屉,第j个(j=0表示顶部的笼屉)位置表示笼屉中是包子还是馒头。
Output
对每组数据输出无法吃到早餐的学生的数量
#include<iostream>
#include<stack>
#include<queue>
using namespace std;
int main()
{
int flag = 0;
int T, M;
cin >> T;
queue<int>output;
queue<int>food;
queue<int>student;
for (int i = 0; i < T; i++)
{
int count = 0;
cin >> M;
for (int k = 0; k < M; k++)
{
int temp1;
cin >> temp1;
student.push(temp1);
}
for (int j = 0; j < M; j++)
{
int temp2;
cin >> temp2;
food.push(temp2);
}
while (!student.empty())
{
if (food.front() == student.front())
{
count = 0;
food.pop();
student.pop();
}
else
{
int f;
f = student.front();
student.pop();
student.push(f);
count++;
if (count == student.size())
break;
}
}
output.push(student.size());
while (!student.empty())
{
student.pop();
food.pop();
}
}
while (!output.empty())
{
cout << output.front()<<endl;
output.pop();
}
return 0;
}