From 4281f49d3f072dda13c75558830ac590b05e5942 Mon Sep 17 00:00:00 2001 From: 9kyo-hwang Date: Thu, 30 May 2024 21:36:18 +0900 Subject: [PATCH] 51-9kyo-hwang --- ...234\354\212\244\355\205\234 Version 2.cpp" | 179 ++++++++++++++++++ 9-kyo-hwang/README.md | 3 +- 2 files changed, 181 insertions(+), 1 deletion(-) create mode 100644 "9-kyo-hwang/Data Structure/21944 \353\254\270\354\240\234 \354\266\224\354\262\234 \354\213\234\354\212\244\355\205\234 Version 2.cpp" diff --git "a/9-kyo-hwang/Data Structure/21944 \353\254\270\354\240\234 \354\266\224\354\262\234 \354\213\234\354\212\244\355\205\234 Version 2.cpp" "b/9-kyo-hwang/Data Structure/21944 \353\254\270\354\240\234 \354\266\224\354\262\234 \354\213\234\354\212\244\355\205\234 Version 2.cpp" new file mode 100644 index 0000000..a4016dd --- /dev/null +++ "b/9-kyo-hwang/Data Structure/21944 \353\254\270\354\240\234 \354\266\224\354\262\234 \354\213\234\354\212\244\355\205\234 Version 2.cpp" @@ -0,0 +1,179 @@ +#include +#include + +using namespace std; + +class Database +{ +public: + int Recommend1(int G, int x) + { + if(x == 1) + { + return Recommend1P(G); + } + else if(x == -1) + { + return Recommend1N(G); + } + } + + int Recommend2(int x) + { + if(x == 1) + { + return Recommend2P(); + } + else if(x == -1) + { + return Recommend2N(); + } + } + + int Recommend3(int x, int L) + { + if(x == 1) + { + return Recommend3P(L); + } + else if(x == -1) + { + return Recommend3N(L); + } + } + + void Add(int P, int L, int G) + { + ProblemByLevel[L].emplace(P); + ProblemByLevelAndGroup[L][G].emplace(P); + Problems[P] = {L, G}; + } + + void Solved(int P) + { + ProblemByLevel[Problems[P].first].erase(P); + ProblemByLevelAndGroup[Problems[P].first][Problems[P].second].erase(P); + } + +private: + set ProblemByLevel[101]; + set ProblemByLevelAndGroup[101][101]; + pair Problems[100001]; + + int Recommend1P(int G) + { + for(int L = 100; L >= 1; --L) + { + if(!ProblemByLevelAndGroup[L][G].empty()) + { + return *(--ProblemByLevelAndGroup[L][G].end()); + } + } + } + + int Recommend1N(int G) + { + for(int L = 1; L <= 100; ++L) + { + if(!ProblemByLevelAndGroup[L][G].empty()) + { + return *ProblemByLevelAndGroup[L][G].begin(); + } + } + } + + int Recommend2P() + { + for(int L = 100; L >= 1; --L) + { + if(!ProblemByLevel[L].empty()) + { + return *(--ProblemByLevel[L].end()); + } + } + } + + int Recommend2N() + { + for(int L = 1; L <= 100; ++L) + { + if(!ProblemByLevel[L].empty()) + { + return *ProblemByLevel[L].begin(); + } + } + } + + int Recommend3P(int L) + { + for(; L <= 100; ++L) + { + if(!ProblemByLevel[L].empty()) + { + return *ProblemByLevel[L].begin(); + } + } + return -1; + } + + int Recommend3N(int L) + { + for(L -= 1; L >= 1; --L) + { + if(!ProblemByLevel[L].empty()) + { + return *(--ProblemByLevel[L].end()); + } + } + return -1; + } +}; + +int main() +{ + cin.tie(nullptr)->sync_with_stdio(false); + + Database* DB = new Database(); + + int N; cin >> N; + while(N--) + { + int P, L, G; cin >> P >> L >> G; + DB->Add(P, L, G); + } + + int M; cin >> M; + while(M--) + { + string Command; cin >> Command; + if(Command == "recommend") // find Max/Min in Category G + { + int G, x; cin >> G >> x; + cout << DB->Recommend1(G, x) << "\n"; + } + else if(Command == "recommend2") // find Max/Min any Category + { + int x; cin >> x; + cout << DB->Recommend2(x) << "\n"; + } + else if(Command == "recommend3") // find lower bound + { + int x, L; cin >> x >> L; + cout << DB->Recommend3(x, L) << "\n"; + } + else if(Command == "add") + { + int P, L, G; cin >> P >> L >> G; + DB->Add(P, L, G); + } + else if(Command == "solved") + { + int P; cin >> P; + DB->Solved(P); + } + } + + delete DB; + + return 0; +} \ No newline at end of file diff --git a/9-kyo-hwang/README.md b/9-kyo-hwang/README.md index 02f8857..14aac20 100644 --- a/9-kyo-hwang/README.md +++ b/9-kyo-hwang/README.md @@ -50,4 +50,5 @@ | 47차시 | 2024.5.16 | Brute Force | [14500 테트로미노](https://www.acmicpc.net/problem/14503) | [#171](https://github.com/AlgoLeadMe/AlgoLeadMe-3/pull/171) | | 48차시 | 2024.5.20 | Shortest Path | [1162 도로포장](https://www.acmicpc.net/problem/1162) | [#175](https://github.com/AlgoLeadMe/AlgoLeadMe-3/pull/175) | | 49차시 | 2024.5.23 | Data Structure | [21939 문제 추천 시스템 Version 1](https://www.acmicpc.net/problem/21939) | [#179](https://github.com/AlgoLeadMe/AlgoLeadMe-3/pull/179) | -| 50차시 | 2024.5.25 | Graph Traversal | [26146 즉흥 여행 (Easy)](https://www.acmicpc.net/problem/26146) | [#182](https://github.com/AlgoLeadMe/AlgoLeadMe-3/pull/182) | \ No newline at end of file +| 50차시 | 2024.5.25 | Graph Traversal | [26146 즉흥 여행 (Easy)](https://www.acmicpc.net/problem/26146) | [#182](https://github.com/AlgoLeadMe/AlgoLeadMe-3/pull/182) | +| 51차시 | 2024.5.30 | Data Structure | [21944 문제 추천 시스템 Version 2](https://www.acmicpc.net/problem/21944) | [#185](https://github.com/AlgoLeadMe/AlgoLeadMe-3/pull/185) | \ No newline at end of file