CF div3 867
G2
考虑按值域分治
将
如果
如果
#include <bits/stdc++.h> using ll = long long; void solve() { int n; std::cin >> n; std::set<int> p; std::map<int,int> mp; for(int i = 0 ; i < n ; ++i) { int x ; std::cin >> x ; p.insert(x); mp[x] ++; } ll ans = 0; int lim = 1E6 , INF = 1E9; for(auto x : p) { if (x <= lim) { for(int b = 1 ; b * b <= x ; ++b) { if(x % b == 0) { if(mp.count(x / b) && mp.count(x * b) ) { if(b != 1) ans += 1ll * mp[x / b] * mp[x] * mp[x * b]; else { if(mp[x] >= 3) ans += 1ll * mp[x] * ( mp[x] - 1 ) * (mp[x] - 2); } } int _b = x / b; if(_b != b && x <= INF / _b && mp.count(x / _b) && mp.count(x * _b)) ans += 1ll * mp[x / _b] * mp[x] * mp[x * _b]; } } } else { for(int b = 1 ; b <= 1000 ; ++b) { if(x % b == 0 ) { if(x <= INF / b && mp.count(x / b) && mp.count(x * b)) { if(b != 1 ) ans += 1ll * mp[x / b] * mp[x] * mp[x * b]; else { if(mp[x] >= 3) { ans += 1ll * mp[x] * (mp[x] - 1) * (mp[x] - 2); } } } } } } } std::cout << ans << '\n'; } int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int t; std::cin >> t; while (t--) { solve(); } return 0; }
本文作者:xqy2003
本文链接:https://www.cnblogs.com/xqy2003/p/17537544.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
蒟蒻一枚 坐标山西大学
欢迎你的到来(??);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步