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

            評論:
            # re: HDU1030 Delta-wave 找規律 2010-11-11 15:23 | gdut
            我草,這題你也敢說水題....代碼copy別人的...  回復  更多評論
              
            精品久久一区二区| 精品国产乱码久久久久软件| 久久福利青草精品资源站| 久久国产成人| 精品久久久无码人妻中文字幕| 久久精品麻豆日日躁夜夜躁| www.久久热.com| 久久久久久久久波多野高潮| 91麻豆精品国产91久久久久久| 久久午夜无码鲁丝片秋霞| 久久婷婷久久一区二区三区| 久久精品国产久精国产一老狼| 一级做a爱片久久毛片| 一本色综合网久久| 无码任你躁久久久久久久| 日本精品久久久久中文字幕| 色婷婷久久综合中文久久蜜桃av | 亚洲AV无码久久寂寞少妇| 久久久青草青青亚洲国产免观| 久久久久亚洲av综合波多野结衣| 国产精品成人无码久久久久久| 久久久无码人妻精品无码| 国产精品美女久久福利网站| 久久久WWW免费人成精品| 情人伊人久久综合亚洲| 精品国产一区二区三区久久| 国产亚洲欧美精品久久久| 伊人久久综合精品无码AV专区| 青青草国产97免久久费观看| 久久久久久A亚洲欧洲AV冫| 国产成人久久777777| 精品久久久久中文字| 久久精品国产亚洲5555| 九九久久精品无码专区| 久久99国产一区二区三区| 精品欧美一区二区三区久久久| 成人精品一区二区久久久| 久久精品一区二区三区中文字幕| 久久精品国产99久久丝袜| 18禁黄久久久AAA片| 亚洲AV无码成人网站久久精品大|