zoukankan      html  css  js  c++  java
  • Divide Sum 比赛时竟然想不出。。。。。。。

    Divide Sum

    Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others)
    SubmitStatus

    Problem Description

    long long ans = 0;
    for(int i = 1; i <= n; i ++)
        for(int j = 1; j <= n; j ++)
            ans += a[i] / a[j];
    给出n,a[1]...a[n],求ans

    Input

    不超过5组数据,每组数据:

    第一行n(1 <= n <= 10^5)

    第二行n个数,a[1].. a[n] (1 <= a[i] <= 10^5)

    Output

    每组数据一行,ans

    Sample Input

    5
    1 2 3 4 5

    Sample Output

    27

    如此做法复杂度为:
    O(nlogn)=n/1+n/2+n/3+n/4+n/5+n/6+n/7+…………+n/n;

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <iostream>
     4 #include <cmath>
     5 #include <algorithm>
     6 int a[100001],b[100001];
     7 long long ans,ans1;
     8 int main()
     9 {
    10     int n,i,x,j,maxa;
    11     while(~scanf("%d",&n))
    12     {
    13         memset(a,0,sizeof(a));
    14         maxa=1;
    15         for(i=0;i<n;i++)scanf("%d",&x),a[x]++,maxa=maxa>x?maxa:x;
    16         b[0]=0;
    17         for(i=1;i<=maxa;i++)
    18         b[i]=b[i-1]+a[i];
    19         ans=0;
    20         for(i=1;i<=maxa;i++)
    21         {
    22             if(a[i])
    23             {
    24                 ans1=0;
    25                 for(j=i-1;j<=maxa;j+=i)
    26                 {
    27                     ans1+=n-b[j];
    28                 }
    29                 ans+=ans1*a[i];
    30             }
    31         }
    32         printf("%lld
    ",ans);
    33     }
    34 }
    View Code
  • 相关阅读:
    顾问和注解
    正则
    GitHub 的简单使用
    JavaScript变态题目
    常用的Javascript设计模式
    HTML5 本地裁剪上传图片
    webpack 打包
    详解js闭包
    常用的Javascript设计模式
    call appiy
  • 原文地址:https://www.cnblogs.com/ERKE/p/3883535.html
Copyright © 2011-2022 走看看