BZOJ1607: [Usaco2008 Dec]Patting Heads 轻拍牛头

Posted Star_Feel

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BZOJ1607: [Usaco2008 Dec]Patting Heads 轻拍牛头相关的知识,希望对你有一定的参考价值。

【传送门:BZOJ1607


简要题意:

  给出n个数,求出在其他数中有多少个数为每个数的约数(lydsy的题意好像错了)


题解:

  听说用叫什么筛选的方法QAQ,不会,结果偷窥了神犇,发现常数不大

  就直接用O(k2)的时间复杂度,k为常数

  记录n个数的最大值,然后将n个数不断累积倍数,得到的值的次数加1,然后记录答案,要记得每个数都不能选自己


参考代码:

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
int a[1100000];
int s[1100000];
int ans[1100000];
int main()
{
    int n;
    scanf("%d",&n);
    int mmax=0;
    memset(s,0,sizeof(s));
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        s[a[i]]++;
        mmax=max(mmax,a[i]);
    }
    for(int i=1;i<=mmax;i++)
    {
        if(s[i]>0)
        {
            for(int j=i;j<=mmax;j+=i)
            {
                ans[j]+=s[i];
            }
        }
    }
    for(int i=1;i<=n;i++) printf("%d\n",ans[a[i]]-1);
    return 0;
}

 

 

 

 

以上是关于BZOJ1607: [Usaco2008 Dec]Patting Heads 轻拍牛头的主要内容,如果未能解决你的问题,请参考以下文章

bzoj1607: [Usaco2008 Dec]Patting Heads 轻拍牛头

BZOJ1607 [Usaco2008 Dec]Patting Heads

bzoj1607 [Usaco2008 Dec]Patting Heads 轻拍牛头——暴力

BZOJ1607: [Usaco2008 Dec]Patting Heads 轻拍牛头

bzoj 1607 [Usaco2008 Dec]Patting Heads 轻拍牛头——枚举倍数

bzoj1607: [Usaco2008 Dec]Patting Heads 轻拍牛头