• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-19  評論-1  文章-0  trackbacks-0
            A triangle field is numbered with successive integers in the way shown on the picture below.



            The traveller needs to go from the cell with number M to the cell with number N. The traveller is able to enter the cell through cell edges only, he can not travel from cell to cell through vertices. The number of edges the traveller passes makes the length of the traveller's route.

            Write the program to determine the length of the shortest route connecting cells with numbers N and M.
            #include <stdio.h>
            #include
            <math.h>
            int main()
            {
                
            int temp,n,m,s,flag=3,cn,cm,zb,yb,cc,k,sj;
                
            while(scanf("%d%d",&m,&n)==2 )
                
            {   
                    flag
            =3;  s=0;  k=0;
                    
            if(m>n) 
                    
            {
                        temp
            =m;  m=n;  n=temp;
                    }

                    cn
            =(int)ceil(sqrt(n));    //判斷n和m所在層數
                    cm=(int)ceil(sqrt(m));
                    cc
            =abs(cn-cm);        //判斷兩點層差
                    zb=m+(cn-1)*(cn-1)-(cm-1)*(cm-1);  //判斷m輻射到n層所及范圍的左邊界和右邊界
                    yb=zb+2*cc;
                     
                    
            if(n>=zb && n <=yb) //判斷n在m范圍所須步數
                    {
                        s
            =2*(cc);
                        k
            =1;
                    }

                    
            else
                    
            {    
                        
            if(n<zb)   //判斷n到m邊界及m點所須步數和
                            s=2*(cc)+abs(n-zb); 
                        
            else
                            s
            =2*(cc)+abs(n-yb);
                    }

                    sj
            =m-(cm-1)*(cm-1);   //判斷三角類型0正,1倒
                    if(abs(n-m)% 2 !=(cc) % 2)
                    
            {
                        
            if(sj % 2 ==1 )
                            flag
            =1;
                        
            else
                            flag
            =0;
                    }

                    
            if(flag==1 && k==1)
                        s
            =s-1;      //假如n點在m點輻射范圍內,正三角-1,倒三角+1,不在不判斷.
                    if(flag==0 && k==1
                        s
            =s+1;
                    printf(
            "%d\n",s);
                }

                
            return 0;
            }
            cn-1)*(cn-1)是1到n-1行末尾的數,也就是1-n的里面小三角形的個數~,
            (cm-1)*(cm-1);也是一樣的嘛~
            兩個相減就是m行的個數了!~ m加個數不就是左邊界了嘛~
            zb+兩倍的行差就是右邊界了!~
            而且正三角所到的邊界是正三角型,反三角所到的邊界是反三角型,這點要注意!

            posted on 2010-10-06 18:05 孟起 閱讀(1321) 評論(1)  編輯 收藏 引用 所屬分類: 水題

            評論:
            # re: HDU1030 Delta-wave 找規律 2010-11-11 15:23 | gdut
            我草,這題你也敢說水題....代碼copy別人的...  回復  更多評論
              
            亚洲日韩欧美一区久久久久我| 亚洲国产精品无码久久久蜜芽| 蜜臀av性久久久久蜜臀aⅴ| 蜜臀久久99精品久久久久久小说| 亚洲国产精品无码久久SM| 青青草原综合久久大伊人精品| 国产精品日韩深夜福利久久| 狠狠色丁香久久婷婷综合_中| 一本色道久久88精品综合| 91久久精品91久久性色| 久久本道综合久久伊人| 久久精品国产免费观看| 久久国产成人午夜AV影院| 无码专区久久综合久中文字幕| 人人狠狠综合久久亚洲88| 2020国产成人久久精品| 久久本道伊人久久| 男女久久久国产一区二区三区 | 久久精品国产亚洲av麻豆色欲 | 一级做a爰片久久毛片毛片| 亚洲AV日韩精品久久久久久| 国产精品无码久久四虎| 久久久精品人妻一区二区三区四| 久久久久亚洲AV成人网人人网站 | 四虎国产精品免费久久5151| 久久这里的只有是精品23| 国产精品美女久久久久AV福利| 精品国产乱码久久久久久人妻| 91久久精品国产免费直播| 久久精品国产亚洲av水果派| 中文字幕人妻色偷偷久久| 日韩美女18网站久久精品| AA级片免费看视频久久| 国产成人精品久久二区二区 | 色综合久久天天综合| 精品无码久久久久久午夜| 亚洲第一极品精品无码久久| 久久精品一本到99热免费| 狠狠色丁香久久婷婷综合蜜芽五月| 久久久久无码精品国产app| 久久亚洲AV无码西西人体|