昨天因?yàn)橛惺聸](méi)有參加上vijos上的比賽,今天準(zhǔn)備參加另一個(gè)比賽,結(jié)果開(kāi)始半小時(shí)后突然停電,無(wú)心思繼續(xù)比賽……來(lái)電之后開(kāi)始處理昨天的賽題。
第一題。
其實(shí)很簡(jiǎn)單,稍稍想了一會(huì)就出來(lái)了。
先考慮對(duì)于三個(gè)數(shù),a[i-1],a[i],a[i+1]。將[a[i-1],a[i+1]]看成一個(gè)區(qū)間,則a[i]相對(duì)區(qū)間的位置可能有三種,在區(qū)間左,區(qū)間內(nèi),區(qū)間右。稍稍考慮發(fā)現(xiàn)在區(qū)間內(nèi)是不需要調(diào)整的;另外兩種情況舉幾個(gè)例子即可。
#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)
評(píng)論(0) 編輯 收藏 引用 所屬分類(lèi):
題目分類(lèi):基礎(chǔ)/模擬