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

            評論:
            # re: HDU1030 Delta-wave 找規律 2010-11-11 15:23 | gdut
            我草,這題你也敢說水題....代碼copy別人的...  回復  更多評論
              
            久久久中文字幕| 久久亚洲精品无码VA大香大香 | 久久久免费精品re6| 伊人久久免费视频| 人妻无码精品久久亚瑟影视 | 久久久亚洲欧洲日产国码是AV| 久久Av无码精品人妻系列| 91精品国产高清久久久久久io| 国产精品免费久久| 久久99亚洲网美利坚合众国| 久久免费美女视频| 久久婷婷人人澡人人爽人人爱| 国产精品久久久久国产A级| 久久精品国产72国产精福利| 久久久久久久综合日本亚洲| 久久亚洲国产成人影院网站| 7国产欧美日韩综合天堂中文久久久久| 色综合久久精品中文字幕首页| 久久综合九色综合网站| 国产成人无码精品久久久免费 | 精品久久久久久无码国产| 青青国产成人久久91网| 久久久久亚洲av成人网人人软件 | 91精品国产高清久久久久久国产嫩草| 老男人久久青草av高清| 欧美日韩精品久久久久| 伊人热热久久原色播放www | 久久综合九色综合欧美狠狠| 中文字幕日本人妻久久久免费 | 久久久久18| 伊人久久大香线蕉影院95| 国产精品18久久久久久vr | 久久国产色AV免费观看| 久久精品国产精品亚洲精品 | 久久香蕉国产线看观看99| 国产三级久久久精品麻豆三级 | 中文字幕亚洲综合久久| 久久精品成人免费看| 久久激情五月丁香伊人| 成人精品一区二区久久久| 91精品国产91久久|