标签:des style os io for ar div amp
5 1 4 2 3 9 0
136 题意:给你一个数组,让你生成两个新的数组,A要求每个数如果能在它的前面找个最近的一个是它倍数的数,那就变成那个数,否则是自己,C是往后找,输出交叉相乘的和 思路:扫描记录因子处理#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; typedef __int64 ll; const int MAXN = 100005; int a[MAXN], b[MAXN], c[MAXN], vis[MAXN]; int n; int main() { while (scanf("%d", &n) == 1) { if (n == 0) break; for (int i = 1; i <= n; i++) scanf("%d", &a[i]); memset(vis, 0, sizeof(vis)); for (int i = 1; i <= n; i++) { if (vis[a[i]]) b[i] = a[vis[a[i]]]; else b[i] = a[i]; for (int j = 1; j <= (int)sqrt((double)a[i]+0.5); j++) { if (a[i] % j == 0) { vis[j] = i; vis[a[i] / j] = i; } } } memset(vis, 0, sizeof(vis)); for (int i = n; i >= 1; i--) { if (vis[a[i]]) c[i] = a[vis[a[i]]]; else c[i] = a[i]; for (int j = 1; j <= (int)sqrt((double)a[i]+0.5); j++) { if (a[i] % j == 0) { vis[j] = i; vis[a[i] / j] = i; } } } ll sum = 0; for (int i = 1; i <= n; i++) { sum += (ll)b[i] * c[i]; } printf("%I64d\n", sum); } return 0; }
HDU - 4961 Boring Sum,布布扣,bubuko.com
标签:des style os io for ar div amp
原文地址:http://blog.csdn.net/u011345136/article/details/38689839