• <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別人的...  回復  更多評論
              
            欧美一区二区三区久久综| 久久国产精品成人片免费| 国产精品成人精品久久久| 国产亚洲精午夜久久久久久| 亚洲国产精品综合久久一线| 精品久久久噜噜噜久久久 | 久久不见久久见免费视频7| 99热精品久久只有精品| 久久亚洲国产最新网站| 久久精品国产久精国产思思| 久久影院亚洲一区| 99久久精品国产麻豆| 性欧美大战久久久久久久| 国产精品女同久久久久电影院| 欧美亚洲日本久久精品| 久久婷婷国产麻豆91天堂| 狠狠综合久久综合88亚洲| 国内精品伊人久久久久网站| 日韩精品久久无码中文字幕| 亚洲欧美国产日韩综合久久| 亚洲伊人久久综合中文成人网| a高清免费毛片久久| 精品久久久久久中文字幕大豆网| 91久久国产视频| 狠狠干狠狠久久| 久久久久女人精品毛片| 久久人人爽人人爽人人片av麻烦| 久久久久久亚洲精品无码| 国内精品久久久久国产盗摄| 一本大道加勒比久久综合| 九九99精品久久久久久| 国产精品对白刺激久久久| 久久亚洲私人国产精品vA| 久久久久久综合网天天| 中文字幕乱码人妻无码久久| 久久夜色精品国产亚洲| 久久久久久精品无码人妻| 精品熟女少妇AV免费久久| 中文字幕久久精品无码| 久久久精品国产免大香伊| 久久综合给久久狠狠97色|