挑战程序设计竞赛:0101抽签

xiaoxiao2021-02-28  116

抽签

从大小为n整数集合A中每次抽一个元素x0记录后放回,要求判断抽四次和恰好为m方案是否存在?

测试数据:

– 输入 n=3 A={1,3,5} m=9 输出Yes 因为 1+1+3+5=9所以存在 – 输入 n=3 A={1,3,5} m=5 输出No 因为不存在

方法一:暴力 O(n^4)

bool solve(int n, int m, vector<int> &k) { for (auto a:k) for (auto b:k) for (auto c:k) for (auto d:k) { if (a + b + c + d == m) return true; } return false; }

方法二:优化枚举+二分搜索O(n^2log(n))

bool solve(int n, int m, vector<int> &k) { vector<int> k2; for (size_t i = 0; i < k.size(); i++) for (size_t j = 0; j < k.size(); j++) { k2.push_back(k[i] + k[j]); } sort(k2.begin(), k2.end()); for (size_t i = 0; i < k2.size(); i++) { if (binary_search(k2.begin(), k2.end(), m - k2[i])) return true; } return false; }

转载请注明原文地址: https://www.6miu.com/read-70706.html

最新回复(0)