题目传送门

算法分析

这道题虽然是最后一道题,但其实非常简单,只需要让越早来的人要的商品越靠后就行了,因为要是太靠前,前面的人把商品先拿走了,空出来位置,后面的人来了就会直接走。
但你以为要用模拟?
其实要相同商品的人,只有第一个人能拿到他想要的商品,后面再想要的人都拿不到了。
所以每种商品只会有一个人买
也就是说,有几种客户,你就能卖出去几件商品,当然前提是你有这种商品才行。

所以,只需要建个桶,去一下重并检查一下客户要的商品有没有就行了,时间复杂度O(n)

代码

#include<iostream>
#include<algorithm>
using namespace std;

int main()
{
    bool x[300] = {0};
    bool y[300] = {0};//声明两个桶
    int n = 0, m = 0;
    int cnt = 0;//用来记录答案
    char z;//用来暂时存储输入的内容

    cin >> n >> m;//两个队列长度

    for(int i = 0; i < n; i++)
    {
        cin >> z;
        x[z - 'a'] = 1;//对桶进行标记
    }
    for(int i = 0; i < m; i++)
    {
        cin >> z;
        y[z - 'a'] = 1;//对桶进行标记
    }

    for(int i = 0; i < 27; i++)//开始遍历桶
    {
        if(x[i] == 1 && y[i] == 1)//x[i]==1代表客户有第x[i]商品的需求,y[i]==1代表有这件商品
        {
            cnt++;//都有就把答案+1
        }
    }

    cout << cnt;

    return 0;
}