loj10199. 「一本通 6.2 练习 2」轻拍牛头

思路:
  筛法的灵活应用。

#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
int a[100010], b[100010], ans[100010];
int main(void) {
    int n, mx = 0;
    scanf("%d", &n);
    for(int i = 1; i <= n; i++) {
        scanf("%d", a + i);
        b[a[i]]++;
        mx = max(mx, a[i]);

    }
    for(int i = 1; i <= mx; i++)
        if(b[i])
            for(int j = 1; i * j <= mx; j++)
                ans[i * j] += b[i];
    for(int i = 1; i <= n; i++)
        printf("%d\n", ans[a[i]] - 1);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/junk-yao-blog/p/9506273.html