• <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 孟起 閱讀(1317) 評論(1)  編輯 收藏 引用 所屬分類: 水題

            評論:
            # re: HDU1030 Delta-wave 找規律 2010-11-11 15:23 | gdut
            我草,這題你也敢說水題....代碼copy別人的...  回復  更多評論
              
            精品无码久久久久久午夜| 超级碰久久免费公开视频| 久久九色综合九色99伊人| 99久久777色| 精品一区二区久久久久久久网站| 国内精品久久久久伊人av| 亚洲AV无码久久精品色欲| 久久久久久伊人高潮影院 | 久久精品国产亚洲av麻豆蜜芽| 性高朝久久久久久久久久| 伊人色综合久久天天人守人婷| 97视频久久久| 狠狠色综合网站久久久久久久高清 | 亚洲精品无码久久久久久| 亚洲精品久久久www| 色综合久久中文字幕无码| www.久久精品| 久久青青国产| 久久久久久久波多野结衣高潮 | 亚洲中文字幕久久精品无码APP| 欧洲成人午夜精品无码区久久| 国产精品免费久久久久电影网| 99久久精品日本一区二区免费| 天天久久狠狠色综合| 久久久久无码中| 婷婷久久久亚洲欧洲日产国码AV | 99久久免费国产精品特黄| 精品久久久久久国产| 国产精品无码久久综合| 久久影院午夜理论片无码| 一极黄色视频久久网站| 亚洲AV乱码久久精品蜜桃| 国产成人无码精品久久久久免费| 久久无码中文字幕东京热| 久久91精品国产91久久户| 久久只有这精品99| 伊人久久综在合线亚洲2019| 久久这里只有精品首页| 国内精品久久久久久不卡影院| 无码人妻精品一区二区三区久久| 久久国产视屏|