hdu 4961 数论?
http://acm.hdu.edu.cn/showproblem.php?pid=4961
给定ai数组;
构造bi, k=max(j | 0<j<i,a j%ai=0), bi=ak;
构造ci, k=min(j | i<j≤n,aj%ai=0), ci=ak;
求所有bi∗ci的和
f[x]表示能整除x的最近的下标,边构造边更新f数组,复杂度约为O(N*sqrt(A[I])) = O(10^7),可以接受,然后把所有b*c加起来即可
另外,我写的程序里面c[i]指的是上面说的b[i]...
预先处理好所有ai的因子也许能更快
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <string>
#include <cmath>
using namespace std;
#define N 100005
#define M 16000005
#define pi acos(-1.0)
#define eps 1e-9
#define Mod 1000000007
int n , m , K;
int a[N];
int f[N];
int c[N]; void work(){
int i , j , k , x , y , d;
for (i=0;i<n;++i)
scanf("%d",&a[i]);
memset(f,-1,sizeof(f));
for (i=0;i<n;++i){
c[i] = ~f[a[i]] ? a[f[a[i]]] : a[i];
x = sqrt(a[i]);
for (j=1;j<=x;++j)
if (a[i] % j == 0) f[j] = i , f[a[i]/j] = i;
}
memset(f,-1,sizeof(f));
long long ans = 0;
for (i=n-1;i>=0;--i){
ans += 1ll*c[i] * (~f[a[i]] ? a[f[a[i]]] : a[i]);
x = sqrt(a[i]);
for (j=1;j<=x;++j)
if (a[i] % j == 0) f[j] = i , f[a[i]/j] = i;
}
printf("%I64d\n",ans);
} int main(){
while (~scanf("%d",&n) && n)
work();
return 0;
}
hdu 4961 数论?的更多相关文章
- hdu 4961 数论 o(nlogn)
Boring Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Tot ...
- hdu 4961 Boring Sum(高效)
pid=4961" target="_blank" style="">题目链接:hdu 4961 Boring Sum 题目大意:给定ai数组; ...
- GCD and LCM HDU 4497 数论
GCD and LCM HDU 4497 数论 题意 给你三个数x,y,z的最大公约数G和最小公倍数L,问你三个数字一共有几种可能.注意123和321算两种情况. 解题思路 L代表LCM,G代表GCD ...
- hdu 4961 Boring Sum(数学题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4961 Problem Description Number theory is interesting ...
- HDU 4497 数论+组合数学
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4497 解题思路:将满足条件的一组x,z,y都除以G,得到x‘,y',z',满足条件gcd(x',y' ...
- hdu 4542 数论 + 约数个数相关 腾讯编程马拉松复赛
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4542 小明系列故事--未知剩余系 Time Limit: 500/200 MS (Java/Others) ...
- hdu 1664(数论+同余搜索+记录路径)
Different Digits Time Limit: 10000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- hdu 3641 数论 二分求符合条件的最小值数学杂题
http://acm.hdu.edu.cn/showproblem.php?pid=3641 学到: 1.二分求符合条件的最小值 /*================================= ...
- hdu 4059 数论+高次方求和+容斥原理
http://acm.hdu.edu.cn/showproblem.php? pid=4059 现场赛中通过率挺高的一道题 可是容斥原理不怎么会.. 參考了http://blog.csdn.net/a ...
随机推荐
- JVM 堆参数调优 (四)
堆参数调优 1.堆的结构 JAVA7 堆逻辑上分为:新生区.养老区.永久区:实际上堆只有新生区.养老区: Minor GC:轻量的垃圾回收: Major GC(Full GC):重量级垃圾回收. ...
- 查看CPU核数和内存
查看CPU核数 top 然后按数字键1 通过虚拟文件系统proc,直接获取CPU总数量 cat /proc/cpuinfo | grep processor 查看内存 free命令主要用于显示内存数量 ...
- 如何实现HashMap的同步
HashMap可以通过Map m = Collections.synchronizedMap(new HashMap())来达到同步的效果.具体而言,该方法会返回一个同步的Map,该Map封装了底层的 ...
- Homestead 修改 Homestead.yaml 文件后 vagrant up 报错的问题
一般情况是 TAB 和空格的问题. 虽然表面看来,缩进是一致的. 但是 TAB 没能替换为空格,从而导致问题. 解决: $ sudo vim /etc/vim/vimrc.local syntax o ...
- Permutation Sequence LT60
The set [1,2,3,...,n] contains a total of n! unique permutations. By listing and labeling all of the ...
- VMware ESXi 配置小结
VMware ESXi 配置小结------------------------------------------------------------------------------------ ...
- SQL 获得两个时间段之间的数据
一般保存在数据库中的日期精度很高,比如'2014-04-15 16:31:22.000' 而一般用户选择的时间精度是精确到日的,比如'2012-04-15' 所以你想取出两个日期之间的数据,如果用下面 ...
- 【搜索】Dungeon Master
Description You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is co ...
- JUC知识点总结图
转载http://www.jsondream.com/2017/06/12/about-JUC.html
- xml约束的概念
1 xml 约束的概念 XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML ...