昨天因為有事沒有參加上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 閱讀(148)
評論(0) 編輯 收藏 引用 所屬分類:
題目分類:基礎/模擬