• <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別人的...  回復  更多評論
              
            思思久久好好热精品国产| 久久99国产综合精品女同| 久久AⅤ人妻少妇嫩草影院| 亚洲国产日韩欧美久久| 无码AV波多野结衣久久| 久久精品国产91久久综合麻豆自制| 久久93精品国产91久久综合| 老男人久久青草av高清| 亚洲嫩草影院久久精品| 无码精品久久久天天影视| 久久97久久97精品免视看| 久久久久久亚洲Av无码精品专口| 日韩精品国产自在久久现线拍| 久久无码AV中文出轨人妻| 亚洲欧美精品伊人久久| 久久国产热精品波多野结衣AV| 久久久久国产精品麻豆AR影院 | 亚洲国产精品成人久久蜜臀 | 无码超乳爆乳中文字幕久久 | 亚洲综合久久久| 99热都是精品久久久久久| 亚洲国产精品无码久久一线 | 国产成人精品综合久久久久 | 亚洲国产精品一区二区久久| 午夜天堂av天堂久久久| 精品久久久无码21p发布 | 97久久超碰国产精品旧版| 中文字幕人妻色偷偷久久| 一级做a爰片久久毛片毛片| 久久夜色撩人精品国产小说| 久久99久久成人免费播放| 久久国产一片免费观看| 久久亚洲中文字幕精品一区| 精品久久久久久国产牛牛app| 国产精品成人精品久久久| 国内精品久久久久久久亚洲| 国产综合免费精品久久久| 欧美午夜精品久久久久久浪潮| 久久青青草原精品国产软件| 亚洲欧美另类日本久久国产真实乱对白 | 国产欧美久久久精品影院|