博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
地震预测(模拟链表)
阅读量:6479 次
发布时间:2019-06-23

本文共 1383 字,大约阅读时间需要 4 分钟。

 

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

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

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

Input

本题有多组输入数据,你必须处理到EOF为止

输入数据第一行有一个数n(1<=n<=105) ,表示采样的次数。

第二行有n个整数,表示n次地壳震动能量的采样值a1,a2,…an (0<=ai<=107 )。

Output

输出n次采样的最小波动值之和。

Sample Input

4

2 0 3 10

Sample Output

21

 

 

有点难想到,用模拟链表的方法才能过,STL的set都超时,做法是,将数据排好序之后模拟成链表,再按开始顺序遍历,找到绝对值最小的再删除。

1 #include
2 #include
3 #include
4 using namespace std; 5 6 #define maxn 100000+10 7 const int INF=1000000000; 8 struct Node 9 {10 int x,p;11 bool operator <(const Node&b)const12 {
return x
=1)25 res = min (res,li[x]-li[pre[x]]);26 if(nex[x]<=n)27 res = min (res,li[nex[x]]-li[x]);28 return res;29 }30 31 int main()32 {33 while(~scanf("%d",&n))34 {35 for(int i=1;i<=n;i++)36 {37 scanf("%d",&num[i].x);38 num[i].p=i;39 }40 sort(num+1,num+n+1);41 for(int i=1;i<=n;i++)42 {43 li[i]=num[i].x;44 c[num[i].p]=i;45 pre[i]=i-1;46 nex[i]=i+1;47 }48 int ans=0;49 for(int i=1;i
View Code

 

转载于:https://www.cnblogs.com/haoabcd2010/p/6728787.html

你可能感兴趣的文章
SQL存储过程中的几个常见设定SET QUOTED_IDENTIFIER/NOCOUNT/XACT_ABORT ON/OFF
查看>>
第一部分:基础知识(第一章)第一个 Silverlight 手机程序
查看>>
Silverlight与Flash区别之一
查看>>
删除恢复Hadoop集群中的DataNode
查看>>
Silverlight 2动态创建矩形对象(附完整源代码)
查看>>
PowerShell中对属性设置别名
查看>>
从京东技术演进看互联网企业的成长历程
查看>>
MFC ado+mysql+odbc技术分享
查看>>
路由基本命令(含中文解释)
查看>>
js中让字符串中特定字符红色显示
查看>>
HttpClient4.5教程-第二章-连接管理
查看>>
Yeslab 马老师 V2V环境下vCenter Server Heartbeat v6.4实现vCenter5.0的双机备份
查看>>
linux下定时任务
查看>>
redhat Nginx 安装
查看>>
利用START命令入侵
查看>>
oracle 配置监听
查看>>
上海访微软 详解Azure和S+S
查看>>
跨国巨头猛攻语音识别技术 让电脑听懂人们说话
查看>>
运行QTP测试脚本后,将编译结果写入指定文件(一)
查看>>
6.1. Principles of Usability
查看>>