• 洛谷P2926 [USACO08DEC]拍头Patting Heads


    洛谷P2926 [USACO08DEC]拍头Patting Heads

    一种是N(sqrt(val))的做法

     1 #include <cstdio> 
     2 #include <cmath>
     3 #define For(i,j,k) for(int i=j;i<=k;i++) 
     4 using namespace std ; 
     5 
     6 const int N = 100011,VAL=1000011,inf = 2e9 ; 
     7 int a[N],num[VAL] ; 
     8 int n,ans ; 
     9 
    10 inline int read() 
    11 {
    12     int x = 0 , f = 1 ; 
    13     char ch = getchar() ; 
    14     while(ch<'0'||ch>'9') { if(ch=='-') f = -1 ; ch = getchar(); } 
    15     while(ch>='0'&&ch<='9') { x = x * 10+ch-48 ; ch = getchar(); } 
    16     return x * f ; 
    17 }
    18 
    19 int main() 
    20 {
    21     n = read() ; 
    22     For(i,1,n) a[i]=read() ,num[a[i]]++ ; 
    23     For(i,1,n) {
    24         ans = -1 ; 
    25         for(int j=1;j*j<=a[i];j++) 
    26             if(a[i]%j==0) {
    27                 ans+=num[j] ; 
    28                 if(j*j!=a[i]) ans+=num[a[i]/j] ; 
    29             }
    30         printf("%d
    ",ans) ; 
    31     }
    32     return 0 ; 
    33 }

    另外是一种不满的 val(log(val))^2 的方法 

     1 #include<cstdio>
     2 #include<algorithm>
     3 using namespace std;
     4 int n,Max,a[100005],num[1000005]/*记录每个数字出现的个数*/,ans[1000005]/*记录每个数字的答案*/;
     5 inline int read(){//读数据 
     6     int N=0;char ch=getchar();
     7     while (ch>'9'||ch<'0') ch=getchar();
     8     while (ch>='0'&&ch<='9') N=N*10+ch-'0',ch=getchar();
     9     return N;
    10 }
    11 int main()
    12 {
    13     n=read();
    14     for (int i=1;i<=n;i++) a[i]=read(),num[a[i]]++,Max=max(Max,a[i]);
    15     for (int i=1;i<=Max;i++){//开始构造答案 
    16         if (num[i]==0) continue;//如果这个数字不存在,则跳过 
    17         for (int j=i;j<=Max;j+=i) ans[j]+=num[i];//i能被j除就把ans[j]加上num[i],累计j的答案 
    18     }
    19     for (int i=1;i<=n;i++) printf("%d
    ",ans[a[i]]-1);//最后输出,记得把自己本身减去 
    20     return 0;
    21 }
  • 相关阅读:
    Vue 路由组件
    编写第一个JavaScript程序
    JavaScript 介绍
    JavaScript
    前台数据库
    cookie
    js date string parse
    判断时间大小 yyyy-MM-dd 格式
    正则表达式替换
    测试计时器
  • 原文地址:https://www.cnblogs.com/third2333/p/7620135.html
Copyright © 2020-2023  润新知