zoukankan      html  css  js  c++  java
  • BZOJ1607 [Usaco2008 Dec]Patting Heads 轻拍牛头

    题目大意:n个数中,对其中每一个数,在其它(n-1)个数中有几个是他的因子。

    题解:考虑到数Ai的范围不算太大,可以用一个桶统计1~MAX(Ai)每个数出现个数,然后把1~MAX的在MAX以内的倍数筛一遍即可。100000个数在1000000的桶里非常稀疏,忽略出现次数为0的数对时间效率十分重要。

    这题用了筛法,勉强算数论题吧。。。。。

    代码:

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<cctype>
     5 #include<iostream>
     6 using namespace std;
     7 #define maxx 1000007
     8 #define maxn 233333
     9 #define ll long long
    10 int a[maxn],num[maxx],n,MAX=0;
    11 ll f[maxx];
    12 int qread()
    13 {
    14     char c;int s=0,t=1;
    15     while (!isdigit(c=getchar())) if (c=='-') t=-1;
    16     do {s=s*10+c-'0';} while (isdigit(c=getchar()));
    17     return s*t;
    18 }
    19 int main()
    20 {
    21     n=qread();
    22     memset(num,0,sizeof(num));
    23     for (int i=1;i<=n;i++) a[i]=qread(),num[a[i]]++,MAX=max(a[i],MAX);
    24     for (int i=1;i<=MAX;i++)
    25         if (num[i]) for (int j=i;j<=MAX;j+=i) f[j]+=num[i];
    26     for (int i=1;i<=n;i++) printf("%lld
    ",f[a[i]]-1);
    27     return 0;
    28 }
    View Code
  • 相关阅读:
    Shell编程基础
    lenovo future leaer deveolpmetn program
    求1+2+...+n
    Linux下使用qq
    判断2个线段是否相交
    java大数相加
    Django路由系统
    Django框架
    HTTP协议及Django配置
    mysql索引
  • 原文地址:https://www.cnblogs.com/Blue233333/p/6159093.html
Copyright © 2011-2022 走看看