昨天因为有事没有参加上vijos上的比赛,今天准备参加另一个比赛,结果开始半小时后突然停电,无心思继续比赛……来电之后开始处理昨天的赛题。
第一题。
其实很简单,稍稍想了一会就出来了。
先考虑对于三个数,a[i-1],a[i],a[i+1]。将[a[i-1],a[i+1]]看成一个区间,则a[i]相对区间的位置可能有三种,在区间左,区间内,区间右。稍稍考虑发现在区间内是不需要调整的;另外两种情况举几个例子即可。
#include<stdio.h>
#define MAX_SIZE 100000
typedef __int64 Long;
int main()
{
Long n,a[MAX_SIZE+1];
Long i,tmp,ans=0;
/**//*
FILE *fin=fopen("in.txt","r");
fscanf(fin,"%I64d",&n);
for(i=1;i<=n;i++)
fscanf(fin,"%I64d",&a[i]);
//*/
/**////*
scanf("%I64d",&n);
for(i=1;i<=n;i++)
scanf("%I64d",&a[i]);
//*/
//------Read In
for(i=2;i<=n-1;i++)
{
if(a[i]>a[i-1]&&a[i]>a[i+1])
{
if(a[i-1]>a[i+1])
{
ans+=abs(a[i]-a[i-1]);
a[i]=a[i-1];
}
else
{
ans+=abs(a[i]-a[i+1]);
a[i]=a[i+1];
}
}
else if(a[i]<a[i-1]&&a[i]<a[i+1])
{
if(a[i-1]<a[i+1])
{
ans+=abs(a[i]-a[i-1]);
a[i]=a[i-1];
}
else
{
ans+=abs(a[i]-a[i+1]);
a[i]=a[i+1];
}
}
}
for(i=2;i<=n;i++)
ans+=abs(a[i]-a[i-1]);
printf("%I64d\n",ans);
return 0;
}
posted on 2010-01-06 19:22
lee1r 阅读(141)
评论(0) 编辑 收藏 引用 所属分类:
题目分类:基础/模拟