题解:CF1418F Equal Product
Priestess_SLG · · 题解
注意(不)到有这样一个结论:
:::info[结论]{open}
对于任意一组满足题目给出条件的等式
构造
固定
-
a<b -
-
\lceil\frac{l}{x_1}\rceil\le y_1\le \min(m,\lfloor\frac{r}{x_2}\rfloor)
前两个条件可以直接贪心的在候选集合中找出最小的满足
int buc[N];
vector<int> divs_[N];
inline void sol() {
int n, m, l, r; cin >> n >> m >> l >> r;
for (int i = 1; i <= max(n, m); ++i)
for (int j = i; j <= max(n, m); j += i) divs_[j].emplace_back(i);
int pl = m + 1, pr = m;
set<int> se;
for (int i = 1; i <= n; ++i) {
while (pl > (l - 1) / i + 1) {
--pl;
for (int &j : divs_[pl]) if (!buc[j]++) se.emplace(j);
} while (pr > r / i) {
for (int &j : divs_[pr]) if (!--buc[j]) se.erase(j);
--pr;
} for (int &j : divs_[i]) {
auto it = se.upper_bound(j);
if (it != se.end() && i / j * *it <= n) {
cout << i << ' ' << pr / *it * *it << ' ' << i / j * *it << ' ' << pr / *it * j << '\n';
goto label;
}
} cout << -1 << '\n'; label:;
}
}