• <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別人的...  回復  更多評論
              
            国产成人久久精品一区二区三区 | 一本一道久久精品综合| 99久久这里只精品国产免费| 国产叼嘿久久精品久久| 久久青草国产精品一区| 久久久久国产一区二区三区| 亚洲国产成人久久综合区| 久久久久人妻一区二区三区 | 久久国产视频99电影| 日日狠狠久久偷偷色综合免费| 亚洲国产精品无码久久九九| 久久久久久久久波多野高潮| 99久久99久久久精品齐齐| 国产精品美女久久久免费| 中文字幕久久亚洲一区| 国产日产久久高清欧美一区| 国产免费福利体检区久久| 久久久久人妻一区二区三区| 久久99精品国产麻豆宅宅| 久久夜色精品国产噜噜亚洲a| 97久久国产露脸精品国产| 亚洲成色999久久网站| 久久这里都是精品| 国产成人精品久久亚洲高清不卡| 久久久久这里只有精品| 国产亚洲精品自在久久| 人妻少妇精品久久| 91精品国产综合久久香蕉| 伊人色综合久久天天人守人婷| 久久久久久国产精品免费无码| 久久精品中文无码资源站| 精品久久久无码中文字幕| 国内精品伊人久久久久av一坑| 97精品伊人久久大香线蕉| 精品久久久久久国产免费了| 亚洲国产一成人久久精品| 久久久久久国产精品无码下载| 国产精品美女久久久网AV| 久久九九有精品国产23百花影院| 99久久精品国产一区二区| 无码国内精品久久综合88|