zoukankan      html  css  js  c++  java
  • hdu 4961 Boring Sum

    http://acm.hdu.edu.cn/showproblem.php?pid=4961

    先打个表,把每个数的约数存起来,然后从前往后扫一遍,结果存在f[i],然后从后往前扫一遍,结果存在c[i],最后算f[i]*c[i]的和。

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <vector>
     4 #include <algorithm>
     5 #define maxn 100001
     6 using namespace std;
     7 
     8 int f[maxn],c[maxn];
     9 vector<int>g[maxn];
    10 int vis1[maxn],vis2[maxn];
    11 int a[maxn];
    12 void inti()
    13 {
    14     for(int i=2; i<=maxn; i++)
    15     {
    16         for(int j=i; j<=maxn; j+=i)
    17         {
    18             g[j].push_back(i);
    19         }
    20     }
    21 }
    22 int n;
    23 int main()
    24 {
    25     inti();
    26     while(scanf("%d",&n)!=EOF)
    27     {
    28         memset(vis1,0,sizeof(vis1));
    29         memset(vis2,0,sizeof(vis2));
    30         memset(f,0,sizeof(f));
    31         memset(c,0,sizeof(c));
    32         memset(a,0,sizeof(a));
    33         if(n==0) break;
    34         for(int i=1; i<=n; i++)
    35         {
    36             scanf("%d",&a[i]);
    37         }
    38         for(int i=1; i<=n; i++)
    39         {
    40             if(vis1[a[i]]==0) f[i]=a[i];
    41             else f[i]=vis1[a[i]];
    42             vis1[1]=a[i];
    43             for(int j=0; j<(int)g[a[i]].size(); j++)
    44             {
    45                 vis1[g[a[i]][j]]=a[i];
    46             }
    47         }
    48         for(int i=n; i>=1; i--)
    49         {
    50             if(vis2[a[i]]==0) c[i]=a[i];
    51             else c[i]=vis2[a[i]];
    52             vis2[1]=a[i];
    53             for(int j=0; j<(int)g[a[i]].size(); j++)
    54             {
    55                 vis2[g[a[i]][j]]=a[i];
    56             }
    57         }
    58         __int64 sum=0;
    59         for(int i=1; i<=n; i++)
    60         {
    61             sum+=(__int64)f[i]*(__int64)c[i];
    62         }
    63         printf("%I64d
    ",sum);
    64     }
    65     return 0;
    66 }
    View Code
  • 相关阅读:
    werfault进程使用CPU率高
    oracel 拆分字符串
    TCP TIME WAIT
    netstat 命令
    Java 理论与实践: 并发集合类
    DIV与SPAN之间有什么区别
    oracle超出打开游标的最大数的原因和解决方案
    Quartz表达式
    Axis创建webservice客户端和服务端
    Web服务cxf框架发布2
  • 原文地址:https://www.cnblogs.com/fanminghui/p/3922879.html
Copyright © 2011-2022 走看看