HDOJ-4961 Boring Sum
来源:互联网 发布:校园网络推广 编辑:程序博客网 时间:2024/05/16 23:49
数据量100000,N * sqrt(N)的复杂度本以为会TLE,谁会400+MS过。。。。。。
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <queue>#include <stack>#include <cmath>#include <cstdlib>#include <vector>#include <map>using namespace std;const int maxn = 100010;long long num[maxn];int vis[maxn],f[maxn], g[maxn];int main(){ int n; while(~scanf("%d", &n) && n) { memset(vis, 0, sizeof(vis)); memset(f, 0, sizeof(f)); memset(g, 0, sizeof(g)); for(int i = 1; i <= n; i++) scanf("%I64d", &num[i]); for(int i = 1; i <= n; i++) { for(int j = sqrt(num[i]); j >= 1; j--) { if(num[i] % j == 0) { if(vis[j] && g[vis[j]] == 0) g[vis[j]] = i; if(vis[num[i]/j] && g[vis[num[i]/j]] == 0) g[vis[num[i]/j]] = i; } } vis[num[i]] = i; } for(int i = 1; i <= n; i++) { if(g[i] == 0) g[i] = i; } memset(vis, 0, sizeof(vis)); for(int i = n; i > 0; i--) { for(int j = sqrt(num[i]); j >= 1; j--) { if(num[i] % j == 0) { if(vis[j] && f[vis[j]] == 0) f[vis[j]] = i; if(vis[num[i]/j] && f[vis[num[i]/j]] == 0) f[vis[num[i]/j]] = i; } } vis[num[i]] = i; } for(int i = 1; i <= n; i++) if(f[i] == 0) f[i] = i; long long ans = 0; for(int i = 1; i <= n; i++) ans = ans + num[f[i]] * num[g[i]]; cout << ans << endl; }}
0 0
- HDOJ-4961 Boring Sum
- 【杂题】 HDOJ 4961 Boring Sum
- HDU 4961 Boring Sum
- HDU - 4961 Boring Sum
- hdu 4961 Boring Sum
- hdu 4961 Boring Sum
- hdu 4961 Boring Sum
- HDU 4961 Boring Sum
- hdu 4961 Boring Sum
- HDU 4961 Boring Sum
- hdu 4961 Boring Sum 多校九
- hdu 4961 Boring Sum(高效)
- 【瞎搞】HDU 4961 Boring Sum
- Boring Sum
- HDU 4961 Boring Sum 构造题
- HDU 4961 Boring Sum(分解因子)
- hdu 4961 Boring Sum【构造题】
- hdu 4961 Boring Sum(数学题)
- iOS进阶面试题----经典10道
- poj1856Sea Battle(DFS)
- NGUI学习笔记(摘)
- [shell]shell函数
- Eclipse时区出问题,与北京时间相差八小时
- HDOJ-4961 Boring Sum
- 下拉框的queryMode相当重要
- iOS7新特性-NSURLSession详解
- CF417D——Cunning Gena(状态压缩DP)
- 2.1 普通查询日志(The General Query Log)
- AspNetPager分页示例—应用CSS样式
- [置顶] 2014训练计划
- 商户营销手段之免费WiFi热点
- 黑马程序员-6-泛型