#include <queue>
#include <stack>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param students int整型vector 
     * @param sandwiches int整型vector 
     * @return int整型
     */
    int countStudents(vector<int>& students, vector<int>& sandwiches) {
        // write code here
        queue<int> duilie;
        stack<int> zhan;
        for (int c : students){
            duilie.push(c);
        }
        for (int j = sandwiches.size() - 1; j >= 0; j--){
            zhan.push(sandwiches[j]);
        }
        
        int unchangedCount = 0; // 记录连续无法匹配的次数
        
        while (!duilie.empty() && unchangedCount < duilie.size()) {
            if (duilie.front() == zhan.top()) {
                // 匹配成功:学生取走三明治
                zhan.pop();
                duilie.pop();
                unchangedCount = 0; // 重置计数器
            } else {
                // 不匹配:学生移到队尾
                int temp = duilie.front();
                duilie.pop();
                duilie.push(temp);
                unchangedCount++; // 增加无法匹配的计数
            }
        }
        return duilie.size();
    }
};