Mutiple

 Accepts: 476
 Submissions: 1025
 Time Limit: 4000/2000 MS (Java/Others)
 Memory Limit: 65536/65536 K (Java/Others)

问题描述
wld有一个序列a[1..n], 对于每个1≤i<n, 他希望你求出一个最小的j(以后用记号F(i)表示),满足i<j≤n, 使aj为ai的倍数(即aj mod ai=0),若不存在这样的j,那么此时令F(i) = 0
保证1≤n≤10000,1≤ai≤10000 对于任意 1≤i≤n, 且对于任意1≤i,j≤n(i!=j),满足ai != aj
输入描述
多组数据(最多10组)
对于每组数据:
第一行:一个数n表示数的个数
接下来一行:n个数,依次为a1,a2,…,an
输出描述
对于每组数据:
输出F(i)之和(对于1≤i<n)
输入样例
4
1 3 2 4
输出样例
6
Hint
F(1)=2
F(2)=0
F(3)=4
F(4)=0

题解:

1.从后往前依次枚举每个数的所有约数(给定的数组),An,An-1,An-2.......A1;
2.对于An,将其所有约数存在在一个hash数组(初始化为0)的索引中,索引对应的值即是An在给定数组中的位置n
3.对于An-1,查看hash[An-1]的值,然后重复步骤2
总结:
1.这个题目并不是非常难,但是我认为很好,因为对于这个题目的惯性思维是对于Ai,查找他后面符合条件的Aj,而
如果这样,搜索空间就会变得太大
2.那么升级一些就是枚举Ai的所有倍数,需要的枚举量依旧很大
3.最后,与其相对的,枚举Aj的所有约数可以将复杂度控制在sqrt(Aj),非常棒
4.总结就是全面的思考问题吧,所有枚举方法分为枚举Ai或者枚举Aj
5.对于枚举Ai,就是搜索其后面的每一个值,或者是Ai的所有可能倍数
6.对于枚举Aj,就是搜索前面的每一个值,或者Aj的所有约数
7.所谓不是很难是因为思考的方向不是很多,即使不是用‘全面思考问题’的方法解题,依旧可以灵光一现,找出
正确答案,不过对于难题,我认为还需要全面的去思考问题
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
#define MAXN 10005
int num[MAXN],n,f[MAXN];
int main()
{while(scanf("%d",&n) != EOF){int ans = 0;memset(f,0,sizeof(f));for(int i = 0;i < n;i++)scanf("%d",&num[i]);for(int i = n - 1;i >= 0;i--){ans += f[num[i]];//cout << ans << " ans " << endl;int q = sqrt(num[i] + 1) + 1;for(int j = 1;j <= q && j <= num[i];j++)if(num[i] % j == 0)f[j] = i + 1,f[num[i] / j] = i + 1;}printf("%d\n",ans);}}

hdu 5211 Mutiple相关推荐

  1. HDU 4389 - X mod f(x)

    题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=4389 2012多校,第9场,1010 . 问题是,询问区间内 存在多少个 哈沙德数(Harshad ...

  2. Tunnels HDU - 4856 (bfs状压dp)

    Tunnels HDU - 4856 Bob is travelling in Xi'an. He finds many secret tunnels beneath the city. In his ...

  3. HDU - 4856 Tunnels (预处理+状压dp)

    HDU - 4856 Tunnels (预处理+状压dp) [hud链接] [vj链接] 题目 Problem Description Bob is travelling in Xi'an. He f ...

  4. hdu 4389 囧,打表

    http://acm.hdu.edu.cn/showproblem.php?pid=4389 题意 :一个数能被他各个位数之和整除则符合要求,给L,R,问区间里有多少个数符合要求. 囧,居然打表就能过 ...

  5. HDU——1106排序(istringstream的使用、STLvector练习)

    排序 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...

  6. hdu 5438 Ponds 拓扑排序

    Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...

  7. HDU 1248 寒冰王座(全然背包:入门题)

    HDU 1248 寒冰王座(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1248 题意: 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票 ...

  8. hdu 1312 Red and Black 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 第二条深搜,题目并不难,但是做了我好久好久,由于一个细节,让我赌上了一个晚上的时间. 题目大意: ...

  9. HDU 1429 胜利大逃亡(续) (BFS+位压缩)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)  ...

  10. hdu 1272 小希的迷宫

    Problem Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该 ...

最新文章

  1. 在C#中使用SerialPort类实现串口通信
  2. 天文学家发现首个“流浪黑洞”,60多个科研机构追踪10年,终因引力透镜露出马脚...
  3. win 10无法启动print spooler服务,提示1068依赖服务或组无法启动
  4. [toolchains]-ARM ToolChains介绍
  5. [云炬创业基础笔记]第二章创业者测试9
  6. 步步为营 .NET 设计模式学习笔记 十三、Bridge (桥接模式)
  7. Java学习资料汇总(JavaSE+JavaEE+数据库+框架+笔试题+面试题)
  8. 把数组排列成最小的数(详解)
  9. 最小延迟调度问题——贪心算法(C++实现)
  10. [20170828]grep过滤技巧.txt
  11. f2fs系列之五:冷热数据分离
  12. 【MATLAB学习】02:MATLAB绘图
  13. 简单的光线追踪教程(一)
  14. 天马行空 PCI理解
  15. Android WiFi热点
  16. Windows Anaconda Pytorch pkgs安装 - 相关问题
  17. Linux 常规安装MySQL 执行启动命令报错(附安装方法)
  18. 狄利克雷分布主题模型LDA
  19. AD2428W手册解读之操作与配置
  20. WTGNet-PlC协议转换网关

热门文章

  1. *rock ,scissors ,paperpku 2339
  2. FYI | Neuro Workshop (Virtual)-Connectomics
  3. 视频传输协议的总结区分
  4. workgroup无法访问 您可能没有权限使用网络资源 (解决方案)
  5. 10个图库素材网站,免费可商用
  6. Linux efi分区被删除了,恢复删掉的 MSR 和 EFI 分区
  7. ACM程序设计之马拉松竞赛
  8. 实习周记----第三周
  9. 微信小程序详细教程-10分钟完成微信小程序开发部署发布
  10. excel两列数据对比找不同_眼睛的救星,Excel怎么快速找出两列数据的不同之处?...