• <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別人的...  回復  更多評論
              
            久久久WWW成人免费毛片| 无码人妻久久一区二区三区蜜桃| 久久精品国产男包| 97香蕉久久夜色精品国产| 无码国产69精品久久久久网站| 亚洲国产精品无码成人片久久| 72种姿势欧美久久久久大黄蕉| 国产福利电影一区二区三区,免费久久久久久久精 | 丁香五月综合久久激情| 香蕉久久AⅤ一区二区三区| 一本久久知道综合久久| 99久久精品国产毛片| 国产亚洲精品久久久久秋霞| 国产一区二区精品久久| 久久午夜福利无码1000合集| 久久综合丝袜日本网| 伊人久久大香线焦AV综合影院| 26uuu久久五月天| 熟妇人妻久久中文字幕| 久久人搡人人玩人妻精品首页| 欧美牲交A欧牲交aⅴ久久| 开心久久婷婷综合中文字幕| 97久久国产亚洲精品超碰热| 久久乐国产综合亚洲精品| 亚洲综合婷婷久久| 久久精品嫩草影院| 久久久一本精品99久久精品66| 亚洲午夜久久久| 欧美久久天天综合香蕉伊| 一本大道久久a久久精品综合| 久久久无码精品亚洲日韩按摩 | 久久精品桃花综合| 久久久久久无码国产精品中文字幕| 国产成人久久AV免费| 亚洲午夜久久久久久久久久| 色欲综合久久躁天天躁| 久久久久一本毛久久久| 久久综合成人网| 欧美国产成人久久精品| 久久久久国产精品三级网| 久久久久18|