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

            評論:
            # re: HDU1030 Delta-wave 找規律 2010-11-11 15:23 | gdut
            我草,這題你也敢說水題....代碼copy別人的...  回復  更多評論
              
            精品久久久久久无码免费| 久久亚洲美女精品国产精品| 精品久久久久国产免费| 久久久久久极精品久久久| 久久久噜噜噜久久| 亚洲精品美女久久777777| 人人狠狠综合久久亚洲婷婷| 性做久久久久久久久浪潮| 99精品国产在热久久无毒不卡 | 亚洲AV成人无码久久精品老人 | 久久综合狠狠综合久久97色| 无码AV中文字幕久久专区| 久久国产美女免费观看精品| 久久久久久午夜成人影院 | 国产精品禁18久久久夂久| 久久久精品视频免费观看| 国产精品久久久久影院色| 少妇熟女久久综合网色欲| 精品久久久无码中文字幕天天| 色综合久久无码五十路人妻| 日韩十八禁一区二区久久 | 国产色综合久久无码有码| 久久天天躁狠狠躁夜夜不卡| 久久久综合九色合综国产| 久久久久亚洲AV无码网站| 人人狠狠综合久久88成人| 精品久久久无码人妻中文字幕| 亚洲国产成人久久笫一页| 精品久久国产一区二区三区香蕉| 久久国产乱子精品免费女| 91精品国产乱码久久久久久| 久久九九精品99国产精品| 亚洲va中文字幕无码久久不卡| 97精品依人久久久大香线蕉97| 亚洲日韩欧美一区久久久久我| 欧美激情精品久久久久久久九九九| 久久久久人妻精品一区三寸蜜桃| 久久国产精品国语对白| 四虎久久影院| 老男人久久青草av高清| 久久天天躁狠狠躁夜夜avapp|