FZU - 1492(Problem 1492 地震预测)
怀特先生是一名研究地震的科学家,最近他发现如果知道某一段时间内的地壳震动能量采样的最小波动值之和,可以有效地预测大地震的发生。
假设已知一段时间的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
题意很好理解不在阐述。。。
思路:
先写一个结构体,结构体中包含下标和值,这里要注意,如果想对结构体中的数据进行排序时,要写一个操作符重载(或者写一个cmp),不然运行不了,比如这份代码中的
bool operator <(const node &v) const
{
return num<v.num;
}
把每个数的值和坐标都存在结构体数组里面后,sort一下,然后把第i个数的前一个数和后一个数的坐标存在b[maxn][2]中,因为只有与i相邻的数的差才是最小的,把当前的数遍历后就把它擦去,用数组模拟链表。
比如:
b[b[i][0]][1]=b[i][1];
b[b[i][1]][0]=b[i][0];
//代码:
#include<queue>
#include<stack>
#include<vector>
#include<math.h>
#include<cstdio>
#include<sstream>
#include<numeric>//STL数值算法头文件
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<functional>//模板类头文件
using namespace std;
const int INF=100000000;
const int maxn=110000;
typedef long long ll;
int n;
struct node
{
int idx,num;
bool operator <(const node &v) const
{
return num<v.num;
}
} a[maxn];
int pos[maxn],b[maxn][2];
inline int min(int A,int B)
{
return A>B?B:A;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
int i,j,sum;
for(i=1; i<=n; i++)
{
scanf("%d",&a[i].num);
a[i].idx=i;
}
sort(a+1,a+n+1);
a[0].idx=0,a[0].num=INF;
a[n+1].idx=n+1,a[n+1].num=INF;
pos[0]=0,pos[n+1]=n+1;
for(i=1; i<=n; i++)
{
pos[a[i].idx]=i;
b[a[i].idx][0]=a[i-1].idx;
b[a[i].idx][1]=a[i+1].idx;
}
sum=a[pos[n]].num;
for(i=1; i<n; i++)
{
int t1=abs(a[pos[i]].num-a[pos[b[i][0]]].num);
int t2=abs(a[pos[i]].num-a[pos[b[i][1]]].num);
sum+=min(t1,t2);
b[b[i][0]][1]=b[i][1];
b[b[i][1]][0]=b[i][0];
}
printf("%d\n",sum);
}
return 0;
}
//同学代码(数组模拟链表)
FZU - 1492(Problem 1492 地震预测)的更多相关文章
- FZU oj Problem 2082 过路费
Problem 2082 过路费 Pro ...
- 【BZOJ】【1492】【NOI207】货币兑换Cash
DP/CDQ分治 orz Hzwer copy了下他的代码……结果在while(j<top......)这一句中把一个括号的位置打错了……找了我一个多小时才找到TAT 很神奇……顺便贴下CDQ的 ...
- NOI 2007 货币兑换Cash (bzoj 1492) - 斜率优化 - 动态规划 - CDQ分治
Description 小Y最近在一家金券交易所工作.该金券交易所只发行交易两种金券:A纪念券(以下简称A券)和 B纪念券(以下 简称B券).每个持有金券的顾客都有一个自己的帐户.金券的数目可以是一个 ...
- bzoj 1492
这道题真好... 首先,感觉像DP,但是如果按照原题意,有无数个状态,每个状态又有无数个转移. 然后思考,我们每次买一部分和卖一部分的原因是什么,如果没有那个比例(就是rate=1恒成立),那么很容易 ...
- HDU 1695 GCD (欧拉函数+容斥原理)
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- HOJ题目分类
各种杂题,水题,模拟,包括简单数论. 1001 A+B 1002 A+B+C 1009 Fat Cat 1010 The Angle 1011 Unix ls 1012 Decoding Task 1 ...
- [ACM] HDU 1533 Going Home (二分图最小权匹配,KM算法)
Going Home Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...
- 07_旅行商问题(TSP问题,货郎担问题,经典NPC难题)
问题来源:刘汝佳<算法竞赛入门经典--训练指南> P61 问题9: 问题描述:有n(n<=15)个城市,两两之间均有道路直接相连,给出每两个城市i和j之间的道路长度L[i][j],求 ...
- DP专题
最全DP总结 https://blog.csdn.net/cc_again/article/details/25866971 ACM题集 https://blog.csdn.net/liuqiyao_ ...
随机推荐
- Centos7下关于memcached的安装和简单使用
在这里,由于用编译安装memcached服务端过于复杂,因此我选用依赖管理工具 yum 来实现 memcached 的服务端安装: [root@localhost /]# yum install -y ...
- 【Foreign】登山 [DP][数学]
登山 Time Limit: 10 Sec Memory Limit: 256 MB Description 恶梦是一个登山爱好者,今天他来到了黄山 俗话说的好,不走回头路.所以在黄山,你只能往前走 ...
- 【LibreOJ】#539. 「LibreOJ NOIP Round #1」旅游路线
[题意]给定正边权有向图,车油量上限C,每个点可以花费pi加油至min(C,ci),走一条边油-1,T次询问s点出发带钱q,旅行路程至少为d的最多剩余钱数. n<=100,m<=1000, ...
- 程序员你为什么这么累? - Controller规范
导读:程序员你为什么这么累? 接口定义:程序员你为什么这么累? - 接口定义 第一篇文章中,我贴了2段代码,第一个是原生态的,第2段是我指定了接口定义规范,使用AOP技术之后最终交付的代码,从15行到 ...
- bzoj 2258 splay
类似于1014,用splay维护这个序列,维护每个节点为根的子树的hash值,对于一个询问二分答案判断就行了. 反思:询问的时候因为是原序列的x,y,所以开始的时候直接splay(x-1)了,后来发现 ...
- JAVA 非对称加密算法RSA
非对称加密算法 RSA过程 : 以甲乙双方为例 1.初始化密钥 构建密钥对,生成公钥.私钥保存到keymap中 KeyPairGenerator ---> KeyPair --> RSAP ...
- python爬虫模块之数据存储模块
数据存储模块的话,目前我这用的比较多的是存储到mysql,所以下面的这个例子也是保存到mysql,用到了ORM映射的SQLAlchemy ,(ORM:Object-Relational Mapping ...
- 在Xcode中使用自定义的代码片段提高效率
拖动代码的时候按住option键,很难拖,注意方法:< 引用于:http://www.2cto.com/kf/201409/336245.html
- jquery文档加载几种写法,图片加载写法
jquery文档加载写法: $(function(){ }) ; //个人最常使用方式 $(document).ready(function(){ }); //调用文档对象下的ready方法传入一个函 ...
- hihocoder 1145 : 幻想乡的日常
#1145 : 幻想乡的日常 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 幻想乡一共有n处居所,编号从1到n.这些居所被n-1条边连起来,形成了一个树形的结构. 每处 ...