• <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  評(píng)論-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所在層數(shù)
                    cm=(int)ceil(sqrt(m));
                    cc
            =abs(cn-cm);        //判斷兩點(diǎn)層差
                    zb=m+(cn-1)*(cn-1)-(cm-1)*(cm-1);  //判斷m輻射到n層所及范圍的左邊界和右邊界
                    yb=zb+2*cc;
                     
                    
            if(n>=zb && n <=yb) //判斷n在m范圍所須步數(shù)
                    {
                        s
            =2*(cc);
                        k
            =1;
                    }

                    
            else
                    
            {    
                        
            if(n<zb)   //判斷n到m邊界及m點(diǎn)所須步數(shù)和
                            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點(diǎn)在m點(diǎn)輻射范圍內(nèi),正三角-1,倒三角+1,不在不判斷.
                    if(flag==0 && k==1
                        s
            =s+1;
                    printf(
            "%d\n",s);
                }

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

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

            評(píng)論:
            # re: HDU1030 Delta-wave 找規(guī)律 2010-11-11 15:23 | gdut
            我草,這題你也敢說(shuō)水題....代碼copy別人的...  回復(fù)  更多評(píng)論
              
            久久亚洲中文字幕精品一区| 久久久噜噜噜久久| 亚洲人成电影网站久久| 久久精品人妻中文系列| 一本一道久久综合狠狠老| 久久精品国产网红主播| 日韩精品国产自在久久现线拍| 久久久久国产视频电影| 久久精品人人做人人爽97| 久久93精品国产91久久综合| 精品多毛少妇人妻AV免费久久| 国产精品久久久天天影视| 久久综合给合综合久久| 久久av无码专区亚洲av桃花岛| 91亚洲国产成人久久精品网址| 久久天天婷婷五月俺也去| 久久99国产精品久久| 久久人做人爽一区二区三区| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 色偷偷久久一区二区三区| 狠狠色婷婷综合天天久久丁香 | 国产精品欧美久久久久天天影视| 亚洲人成电影网站久久| 国产福利电影一区二区三区久久久久成人精品综合 | 久久99国产综合精品| 久久午夜无码鲁丝片秋霞 | 亚洲精品午夜国产VA久久成人| 亚洲狠狠综合久久| 狠狠色丁香久久综合婷婷| 国产亚洲精品自在久久| 久久无码人妻一区二区三区| 无码国内精品久久综合88| 久久久精品无码专区不卡| 国产精品无码久久综合网| 国产精品久久国产精品99盘| 久久久久人妻精品一区二区三区| 久久久久久精品无码人妻| 久久久久久精品久久久久| 中文字幕人妻色偷偷久久| 免费精品久久天干天干| 伊人情人综合成人久久网小说 |