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