FZU 1492 地震预测(模拟链表的应用)(Java实现)

怀特先生是一名研究地震的科学家,最近他发现如果知道某一段时间内的地壳震动能量采样的最小波动值之和,可以有效地预测大地震的发生。

假设已知一段时间的n次地壳震动能量的采样值为a1,a2,…an,那么第i 次采样的最小波动值为min{|ai-aj| | i<j<=n},即第i 次采样的最小波动值是其后n-i次采样值与第i次采样值之差的绝对值中最小的值,特别地,第n次采样的最小波动值为an。

请编写一个程序计算这n次采样的最小波动值之和。

如果将这个数组排序后,那么波动最小必须要求两个数字相距越近越好,同时还要去掉那些之前的数字,因此可以使用链表保存排序后的数组,删除操作是O(1)的,查询做一下预处理也可以做到O(1)

import java.io.*;
import java.util.*; class node {
int id;
int v;
} class cmp implements Comparator<node> {
@Override
public int compare(node a, node b) {
return a.v > b.v ? 1 : -1;
}
} public class Main {
static final int N = 100005;
static node a[] = new node[N];
static int idx[] = new int[N];
static int pre[] = new int[N];
static int next[] = new int[N];
static final int inf= 0x3f3f3f3f;
public static void main(String[] args) throws IOException {
Scanner cin = new Scanner(new InputStreamReader(System.in));
while (cin.hasNext()) {
int n = cin.nextInt();
for (int i = 1; i <= n; i++) {
if (a[i] == null) a[i] = new node();
a[i].v = cin.nextInt();
a[i].id = i;
}
a[0]=new node();a[n+1]=new node();
a[0].v=a[n+1].v=inf;
long ans = a[n].v;
Arrays.sort(a, 1, 1 + n, new cmp());
for (int i = 1; i <= n; i++) {
idx[a[i].id] = i;
pre[i] = i - 1;
next[i] = i + 1;
}
int min, j, tmp;
for (int i = 1; i < n; i++) {
j = idx[i];
min = Math.abs(a[pre[j]].v - a[j].v);
min = Math.min(Math.abs(a[next[j]].v - a[j].v), min);
next[pre[j]]=next[j];
pre[next[j]]=pre[j];
ans += min;
}
System.out.println(ans);
}
cin.close();
}
}

最新文章

  1. 如何设置GridView中某个字段显示数据的一部分?
  2. SQL基本语句(2)
  3. 【风马一族_Java】在某个范围内,找出具有水仙花特征的数字
  4. G - Just a Hook
  5. ftp 匿名访问设置
  6. Android(java)学习笔记258:JNI之hello.c(c代码功能实现)指针语法解析
  7. java--join方法
  8. ural 1352. Mersenne Primes
  9. C++模板杂谈
  10. css小工具
  11. 转载:一位资深程序员大牛给予Java初学者的学习路线建议
  12. 使用Java命令行方式导入第三方jar包来运行Java程序的命令
  13. linux查看用户登录,操作历史等
  14. 稍稍解读下ThreadPoolExecutor
  15. Spring Cloud 与 Dubbo、Spring Cloud 与 Docker、Spring Cloud 与 Kubernetes 比较
  16. centos-linux热拔插scsi硬盘
  17. SpringMVC + Mybatis 多数据源配置
  18. [leetcode]680. Valid Palindrome II有效回文II(可至多删一原字符)
  19. [转]SQL SERVER中openrowset与opendatasource的区别
  20. idea 配置简单web

热门文章

  1. 配置文件git config介绍
  2. 【废弃中】【WIP】JavaScript 数组
  3. E20170610-hm
  4. WPF-CheckBox(复选框、功能开关)美化
  5. webpack+vue-cli中proxyTable配置接口地址代理详细解释
  6. mysql left join 出现的结果会重复
  7. Android 性能优化(9)网络优化( 5)Optimizing Server-Initiated Network Use
  8. Spring 侵入式和非侵入式
  9. 15 C#中的条件执行,if else
  10. STL容器迭代过程中删除元素技巧(转)