采购单问题
#include<iostream>
#include<map>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
bool cmp(pair<string, int> a, pair<string, int> b)//自定义vector根据元素pair的second值排序
{
return a.second > b.second;
}
int main()
{
int n, m;
while (cin >> n >> m)
{
vector<int> a(n);
vector<pair<string, int>> v;
for (int i = 0; i < n; i++)//输入价格
{
int price;
cin >> price;
a[i]=price;
}
sort(a.begin(), a.end());//价格排序
map<string, int> res;
for (int i = 0; i < m; i++)//对购物单进行统计 value值为数量
{
string str;
cin >> str;
if (!res.count(str))
res[str] = 1;
else
res[str]++;
}
for (auto iter = res.begin(); iter != res.end(); iter++)//将map值传进vector,是为了根据valuse值排序
v.push_back(*iter);
sort(v.begin(), v.end(), cmp);//按value值逆序排序
int min = 0, max = 0, left = 0, right = n - 1;
for (int i = 0; i < v.size(); i++)
{
min += v[i].second*a[left++];//大数量乘以低价格得到最小消费
max += v[i].second*a[right--];//大数量乘以高价格得到最高消费
}
cout << min << " " << max << endl;
}
return 0;
}