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


    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();
    	}
    }
    
    
  • 相关阅读:
    Hybrid APP基础篇(四)->JSBridge的原理
    剑指offer
    剑指offer
    如何在HTML中设置文本的大小写
    如何给HTML标签中的文本设置修饰线
    CSS设置文本的水平对齐方向
    如何在HTML中设置字体颜色,你知道这几种方式吗?
    CSS尺寸样式属性
    CSS基本选择器是什么?基本选择器是如何工作
    如何创建 CSS
  • 原文地址:https://www.cnblogs.com/zsyacm666666/p/6721509.html
Copyright © 2020-2023  润新知