草庐IT

Sandwiches

全部标签

1700. 无法吃午餐的学生数量

题目:学校的自助午餐提供圆形和方形的三明治,分别用数字0和1表示。所有学生站在一个队列里,每个学生要么喜欢圆形的要么喜欢方形的。餐厅里三明治的数量与学生的数量相同。所有三明治都放在一个栈里,每一轮:如果队列最前面的学生喜欢栈顶的三明治,那么会拿走它并离开队列。否则,这名学生会放弃这个三明治并回到队列的尾部。这个过程会一直持续到队列里所有学生都不喜欢栈顶的三明治为止。给你两个整数数组students和sandwiches,其中sandwiches[i]是栈里面第i个三明治的类型(i=0是栈的顶部),students[j]是初始队列里第j名学生对三明治的喜好(j=0是队列的最开始位置)。请你返回无

[ABC318E] Sandwiches 题解

[ABC318E]Sandwiches题解题意简述  给定包含\(n\)个整数的序列\(a\),其中任意元素的值\(a_i\in[1,n]\),统计包含三个元素的满足以下条件有序三元组数量:满足下标严格递增;满足第一个和最后一个元素相等,而中间的元素和两端的元素不相等。  记录三元组\((a_i,a_j,a_k)\),即\(1\lei。思路分析  看到统计三元组就想到了扫描线。我们以\(k\)为扫描线,统计在\(k\)左侧的满足条件的三元组。  我们先观察到\(a_i=a_k\)是个比较严格的条件限制,于是我们可以\(n\)个vector维护每种数组的对应下标。现在我们画一张图:  我们令当前