• <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別人的...  回復  更多評論
              
            久久精品亚洲精品国产色婷| 久久久精品人妻无码专区不卡| 思思久久精品在热线热| 久久婷婷人人澡人人爽人人爱| 久久精品中文字幕无码绿巨人| 93精91精品国产综合久久香蕉 | 99久久免费国产精品特黄| 亚洲日本va中文字幕久久| 国产毛片久久久久久国产毛片 | 久久精品国产亚洲AV高清热| 精品国产91久久久久久久a | 国产伊人久久| 久久精品国产亚洲av水果派 | 丁香色欲久久久久久综合网| AAA级久久久精品无码片| 久久久久久精品免费免费自慰| 91精品婷婷国产综合久久| 97久久精品人妻人人搡人人玩| 99久久免费国产精品特黄| 久久青青草原亚洲av无码| 94久久国产乱子伦精品免费| 久久国产色AV免费观看| 老色鬼久久亚洲AV综合| 无码人妻久久一区二区三区免费| 色99久久久久高潮综合影院| 久久久久亚洲爆乳少妇无| 久久国产精品免费| 久久99精品久久久久久齐齐| 99久久精品国产一区二区蜜芽| 丰满少妇高潮惨叫久久久| 成人综合伊人五月婷久久| 狠狠色婷婷综合天天久久丁香| 久久精品国产亚洲AV大全| 成人久久综合网| 久久精品免费观看| 成人亚洲欧美久久久久| 国产午夜精品理论片久久| 久久99精品九九九久久婷婷| 人妻无码久久精品| 无码久久精品国产亚洲Av影片| 亚洲精品国产美女久久久|