• <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別人的...  回復  更多評論
              
            国产精品久久久久a影院| 国产精品久久久久久福利漫画| 少妇高潮惨叫久久久久久| 欧美牲交A欧牲交aⅴ久久| 亚洲伊人久久大香线蕉苏妲己| 国产高清国内精品福利99久久| 色婷婷综合久久久久中文字幕| 囯产精品久久久久久久久蜜桃| 久久亚洲高清观看| 99久久精品免费看国产一区二区三区 | 久久婷婷五月综合成人D啪| 国产一区二区精品久久| 久久天天躁狠狠躁夜夜avapp | 亚洲精品高清久久| 久久久黄色大片| 国产AV影片久久久久久| 四虎影视久久久免费观看| 久久狠狠高潮亚洲精品| 亚洲中文字幕无码久久2020| 久久青草国产精品一区| 国产毛片欧美毛片久久久| 久久精品一区二区影院| 色成年激情久久综合| 无码久久精品国产亚洲Av影片 | 国产成人精品综合久久久| 国内精品伊人久久久久影院对白| 久久夜色精品国产噜噜麻豆| 久久伊人影视| 日韩精品久久久久久久电影| 国产精品成人精品久久久 | 成人综合久久精品色婷婷| 欧美亚洲另类久久综合| 无码人妻精品一区二区三区久久 | 精品免费久久久久国产一区| 亚洲人成网亚洲欧洲无码久久| 久久久久亚洲精品男人的天堂| 91麻精品国产91久久久久| 久久久WWW免费人成精品| 色99久久久久高潮综合影院| 国产叼嘿久久精品久久| 久久精品夜夜夜夜夜久久|