算法分析
这道题虽然是最后一道题,但其实非常简单,只需要让越早来的人要的商品越靠后就行了,因为要是太靠前,前面的人把商品先拿走了,空出来位置,后面的人来了就会直接走。
但你以为要用模拟?
其实要相同商品的人,只有第一个人能拿到他想要的商品,后面再想要的人都拿不到了。
所以每种商品只会有一个人买
也就是说,有几种客户,你就能卖出去几件商品,当然前提是你有这种商品才行。
所以,只需要建个桶,去一下重并检查一下客户要的商品有没有就行了,时间复杂度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;
}
京公网安备 11010502036488号