• <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 孟起 閱讀(1318) 評論(1)  編輯 收藏 引用 所屬分類: 水題

            評論:
            # re: HDU1030 Delta-wave 找規律 2010-11-11 15:23 | gdut
            我草,這題你也敢說水題....代碼copy別人的...  回復  更多評論
              
            97香蕉久久夜色精品国产| 久久亚洲中文字幕精品有坂深雪 | 久久久久久A亚洲欧洲AV冫| 婷婷综合久久中文字幕| 久久综合久久伊人| 久久国产精品无码一区二区三区 | 亚洲AV无码久久精品成人| 国产欧美久久一区二区| 久久久久久青草大香综合精品| 老男人久久青草av高清| 久久永久免费人妻精品下载| 久久精品18| 久久国产精品一国产精品金尊| 日韩美女18网站久久精品| 久久国产精品77777| 欧美伊人久久大香线蕉综合 | 久久久免费精品re6| 久久久久亚洲爆乳少妇无 | 久久99久久99精品免视看动漫| 日韩影院久久| 久久人人爽人人爽人人片AV麻豆 | 色欲久久久天天天综合网 | 久久99久久成人免费播放| 无码精品久久久天天影视| 久久这里只有精品视频99| 91秦先生久久久久久久| 国产亚洲综合久久系列| 久久久久久久亚洲Av无码| 国产亚洲美女精品久久久2020| 久久亚洲2019中文字幕| 国产午夜福利精品久久| 久久99久久99小草精品免视看| 久久男人Av资源网站无码软件| 婷婷伊人久久大香线蕉AV| 久久综合狠狠综合久久综合88 | 日本三级久久网| 国产亚洲精品自在久久| 99久久精品国内| 91精品日韩人妻无码久久不卡| 久久久久久久久无码精品亚洲日韩 | 婷婷久久综合九色综合98|