// Source : https://leetcode.com/problems/number-of-students-unable-to-eat-lunch/ // Author : Hao Chen // Date : 2021-05-10 /***************************************************************************************************** * * The school cafeteria offers circular and square sandwiches at lunch break, referred to by numbers 0 * and 1 respectively. All students stand in a queue. Each student either prefers square or circular * sandwiches. * * The number of sandwiches in the cafeteria is equal to the number of students. The sandwiches are * placed in a stack. At each step: * * If the student at the front of the queue prefers the sandwich on the top of the stack, they * will take it and leave the queue. * Otherwise, they will leave it and go to the queue's end. * * This continues until none of the queue students want to take the top sandwich and are thus unable * to eat. * * You are given two integer arrays students and sandwiches where sandwiches[i] is the type of the * ith sandwich in the stack (i = 0 is the top of the stack) and students[j] is the preference of * the jth student in the initial queue (j = 0 is the front of the queue). Return the number of * students that are unable to eat. * * Example 1: * * Input: students = [1,1,0,0], sandwiches = [0,1,0,1] * Output: 0 * Explanation: * - Front student leaves the top sandwich and returns to the end of the line making students = * [1,0,0,1]. * - Front student leaves the top sandwich and returns to the end of the line making students = * [0,0,1,1]. * - Front student takes the top sandwich and leaves the line making students = [0,1,1] and sandwiches * = [1,0,1]. * - Front student leaves the top sandwich and returns to the end of the line making students = * [1,1,0]. * - Front student takes the top sandwich and leaves the line making students = [1,0] and sandwiches = * [0,1]. * - Front student leaves the top sandwich and returns to the end of the line making students = [0,1]. * - Front student takes the top sandwich and leaves the line making students = [1] and sandwiches = * [1]. * - Front student takes the top sandwich and leaves the line making students = [] and sandwiches = []. * Hence all students are able to eat. * * Example 2: * * Input: students = [1,1,1,0,0,1], sandwiches = [1,0,0,0,1,1] * Output: 3 * * Constraints: * * 1 <= students.length, sandwiches.length <= 100 * students.length == sandwiches.length * sandwiches[i] is 0 or 1. * students[i] is 0 or 1. ******************************************************************************************************/ class Solution { public: int countStudents(vector<int>& students, vector<int>& sandwiches) { int st[2] = {0}; for(auto s: students) { st[s]++; } int cnt = 0; for(auto& san : sandwiches){ if (st[san] == 0) break; st[san]--; cnt++; } return students.size() - cnt; } };