心如止水
Je n'ai pas le temps
posts - 400,comments - 130,trackbacks - 0

昨天因为有事没有参加上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 阅读(135) 评论(0)  编辑 收藏 引用 所属分类: 题目分类:基础/模拟

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理