码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-10-06 15:56:54      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:return   std   for   com   include   href   line   enter   turn   

【传送门: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 轻拍牛头

标签:return   std   for   com   include   href   line   enter   turn   

原文地址:http://www.cnblogs.com/Never-mind/p/7631611.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!