Untitled
Darin
plain_text
2 years ago
2.2 kB
10
Indexable
#include<iostream>
#include<vector>
#include<string>
#include<unordered_map>
#include<algorithm>
#define MAX_PRODUCTS 30005
using namespace std;
struct Product{
int price;
bool isBuy;
} products[MAX_PRODUCTS];
int cntProducts; // tuong ung voi id san pham
/* hash table
key - tags
value - id products ~ cntProduct
*/
unordered_map<string, vector<int>> hashProduct;
void init(int N)
{
cntProducts = 0;
hashProduct.clear();
}
void addProduct(int mPrice, int tagNum, char tagName[][10])
{
products[cntProducts].price = mPrice;
products[cntProducts].isBuy = false;
// tao vector luu cac tag
vector<string> tag;
// push ten tag vao vector tag
for (int i = 0; i < tagNum; i++) {
tag.push_back(tagName[i]);
}
// sap xep tag tu a-z
sort(tag.begin(), tag.end());
// push tag don
for (auto s:tag){
hashProduct[s].push_back(cntProducts);
}
// hoan vi tag don de tao ra tag 3
for (int i = 0; i < tag.size(); i++){
for (int j = i+1; j < tag.size(); j++){
for (int k = j+1; k < tag.size(); k++){
string s = tag[i] + " " + tag[j] + " " + tag[k];
//cout << "add " << s << endl;
hashProduct[s].push_back(cntProducts); // push tag 3
}
}
}
cntProducts++;
}
int buyProduct(char tag1[], char tag2[], char tag3[])
{
vector<string> tag;
tag.push_back(tag1);
tag.push_back(tag2);
tag.push_back(tag3);
sort(tag.begin(), tag.end());
string s = tag[0] + " " + tag[1] + " " + tag[2];
//cout << "buy " << s << endl;
int res = -1;
// tim cac sp co dung tag s
for (auto id:hashProduct[s]){
if (products[id].isBuy == false && (res == -1 || products[id].price < products[res].price)){
res = id;
}
}
if (res == -1) return -1; // khong mua duoc
products[res].isBuy = true;
return products[res].price;
}
void adjustPrice(char tag1[], int changePrice)
{
for (auto id:hashProduct[tag1]){
products[id].price += changePrice;
}
}Editor is loading...