HDU 1030  Delta-wave

来源:互联网 发布:淘宝魔镜数据 编辑:程序博客网 时间:2024/04/29 00:34

每个点都可以用三向坐标来表示
最短路径=两点各坐标差的绝对值之和决定的。用三向坐标
表示后,你会发现最短路径总是穿过3种线段,步数=各线段和=坐标差之和.有时侯把图转过几个角度或把元素分分类或掠取几条线都可能有新发现。
改进:2个坐标分析是完全相同的,写成函数再用两个数组记录反回,再控制一下格式完全可以压到30行以内,25都是可能的,而且这程序效率很高。这基本上是发现一种规律而不是想一种算法,呵呵,天然算法。。

原文出处:http://acm.hdu.edu.cn/forum/read.php?tid=8761&fpage=0&page=1

#include <stdio.h>
#include <math.h>
main()
{
 int n1,n2;
 inti,alevel,aright,aleft,blevel,bright,bleft,steps;
 while(scanf("%d%d",&n1,&n2)==2)
 {
  alevel=1;
  blevel=1;
  for(i=1;;i=i+2)
  {
   if(n1-i<=0)
   {
    aright=(i-n1)/2+1;
    aleft=(n1+1)/2;
    break;
   }
   alevel++;
   n1=n1-i;
  }
  for(i=1;;i=i+2)
  {
   if(n2-i<=0)
   {
    bright=(i-n2)/2+1;
    bleft=(n2+1)/2;
    break;
   }
   blevel++;
   n2=n2-i;
  }
  steps=abs(alevel-blevel)+abs(aleft-bleft)+abs(aright-bright);//千万注意是取绝对值的!!!
  printf("%d\n",steps);
 }
}

原创粉丝点击