hdoj 5211 Mutiple 【数学】

题目链接:hdoj 5211 Mutiple

题意:给定n元素的序列a[],f[i]为最小的j满足a[j] % a[i] == 0,不存在为0。问你 ni=1f[i]

怎么搞都可以过,毕竟n太小。。。

AC代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#define CLR(a, b) memset(a, (b), sizeof(a))
using namespace std;
typedef long long LL;
const int INF = 0x3f3f3f3f;
const int MAXN = 1e4 + 10;
int a[MAXN];
int pos[MAXN];
int main()
{
    int n;
    while(scanf("%d", &n) != EOF) {
        CLR(pos, 0);
        for(int i = 1; i <= n; i++) {
            scanf("%d", &a[i]);
            pos[a[i]] = i;
        }
        int ans = 0;
        for(int i = 1; i <= n; i++) {
            int id = INF;
            for(int j = 2; a[i] * j <= n; j++) {
                int v = a[i] * j;
                if(pos[v] && pos[v] > i) {
                    id = min(id, pos[v]);
                }
            }
            if(id != INF) ans += id;
        }
        printf("%d\n", ans);
    }
    return 0;
}

你可能感兴趣的:(hdoj 5211 Mutiple 【数学】)