• <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別人的...  回復  更多評論
              
            亚洲人成网站999久久久综合| 72种姿势欧美久久久久大黄蕉| 91精品国产色综久久 | 久久国产精品免费一区二区三区| 麻豆精品久久久一区二区| 精品久久久久久无码中文字幕| 色欲综合久久躁天天躁| 亚洲AV无码久久精品狠狠爱浪潮 | 久久精品国产WWW456C0M| 亚洲欧美久久久久9999| 久久久精品人妻一区二区三区蜜桃| 久久精品国产亚洲av麻豆色欲| 久久久国产一区二区三区| 日韩人妻无码一区二区三区久久| 2021久久国自产拍精品| 国产亚洲精久久久久久无码77777| 国产精品对白刺激久久久| 免费一级欧美大片久久网| 亚洲一区中文字幕久久| 亚洲中文字幕无码久久2017| 久久e热在这里只有国产中文精品99| 亚洲精品无码专区久久久| 久久久久久极精品久久久| 久久本道伊人久久| 无码伊人66久久大杳蕉网站谷歌| 精品无码久久久久久国产| 国产精品久久久久jk制服| 中文字幕乱码久久午夜| 亚洲伊人久久成综合人影院 | 久久精品免费一区二区三区| 久久精品国产日本波多野结衣| 久久强奷乱码老熟女网站| 久久久91精品国产一区二区三区| 亚洲午夜久久久久久久久久| 99精品国产免费久久久久久下载| 久久精品国产亚洲Aⅴ蜜臀色欲| 四虎国产永久免费久久| 国产成人久久777777| 精品久久久久久国产三级| 激情五月综合综合久久69| 久久亚洲视频|