Re: [閒聊] 每日leetcode

看板Marginalman作者 (6B)時間2月前 (2025/09/29 02:41), 編輯推噓0(001)
留言1則, 1人參與, 2月前最新討論串1527/1548 (看更多)
已經沒有人寫了嗎 2197. 不知道幾個禮拜前的 寫錯好幾版還有MLE 終於改出來惹 2289ms 我真的好爛 醜醜ㄉ:( class Solution { public: vector<int> replaceNonCoprimes(vector<int>& nums) { vector<int> res; int n = nums.size(); bool left = false; bitset<100001> b1; unordered_map<int, int> p1; get_bp(nums[0], b1, p1); for(int i = 1; i < n; i++){ bitset<100001> b2; unordered_map<int, int> p2; get_bp(nums[i], b2, p2); if((b1 & b2).any()){ b1 |= b2; comb_p(p1, p2); left = true; } else if(left){ int rlen = res.size(); for(int j = rlen-1; j >= 0; j--){ bitset<100001> lb; unordered_map<int, int> lp; get_bp(res[j], lb, lp); if((b1 & lb).any()){ b1 |= lb; comb_p(p1, lp); res.pop_back(); } else{ left = false; break; } } left = false; if((b1 & b2).any()){ b1 |= b2; comb_p(p1, p2); left = true; } else { res.emplace_back(p2i(p1)); b1 = b2; p1 = p2; } } else { res.emplace_back(p2i(p1)); b1 = b2; p1 = p2; } } if(left){ int rlen = res.size(); for(int j = rlen-1; j >= 0; j--){ bitset<100001> lb; unordered_map<int, int> lp; get_bp(res[j], lb, lp); if((b1 & lb).any()){ b1 |= lb; comb_p(p1, lp); res.pop_back(); } else break; } } res.emplace_back(p2i(p1)); return res; } void comb_p(unordered_map<int, int>& p1, unordered_map<int, int>& p2){ for(auto [key, val]: p2){ p1[key] = max(p1[key], val); } } void get_bp(int num, bitset<100001>& b, unordered_map<int, int>& p){ for(int i = 2; i*i <= num; i++){ while((num % i) == 0){ p[i]++; b[i] = 1; num /= i; } } if(num > 1){ b[num] = 1; p[num]++; } } int p2i(unordered_map<int, int>& p){ int mul = 1; for(auto [key, val]: p){ mul *= pow(key, val); } return mul; } bitset<100001> get_b(int num){ bitset<100001> b; for(int i = 2; i*i <= num; i++){ while((num % i) == 0){ b[i] = 1; num /= i; } } if(num > 1){ b[num] = 1; } return b; } unordered_map<int, int> get_p(int num){ unordered_map<int, int> primes; for(int i = 2; i*i <= num; i++){ while((num % i) == 0){ primes[i]++; num /= i; } } if(num > 1){ primes[num]++; } return primes; } }; -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.135.99.218 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1759084903.A.E9E.html

09/29 09:38, 2月前 , 1F
我好爛
09/29 09:38, 1F
文章代碼(AID): #1esO5dwU (Marginalman)
討論串 (同標題文章)
文章代碼(AID): #1esO5dwU (Marginalman)