Knight's Trip---hdu3766(馬走日求最小走的步數)

來源:互聯網
上載者:User

標籤:

題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=3766

給你一個x ,y 求出從(0,0)位置到達需要的最小步數每次只能走日型;

為暴力bfs得到的答案;可以看一下;

 

/**首先,xy的大小排序和轉化為都是正數步數不變應該懂吧。y=2*x這種情況直接就是(x+y)/3步。如果y<2*x但是(x+y)%3==0的話,那麼我們可以通過控制(1,2),(2,1)兩種跳法的次數達到...總數必然是(x+y)/3,然後xy的和對3取餘是1的話,我們是不是必然可以在(x+y-1)/3步的時候跳到(x,y-1)這個點,但是不能一步跳到(x,y),回撤兩步到(x-4,y-5)這個點,我們可以用三步跳到(x,y),那麼就是原先的步數+1。餘數為2,就是先跳到(x-1,y-1)這個地方,我們知道(0,0)到(1,1)只需要兩步,那麼(x-1,y-1)到(x,y)也就是原先步數+2.然後考慮y>2*x,先把(0,1)的情況特殊處理一下。接著我們可以用x步跳到(x,y),那麼原問題就轉化為(0,0)到(0,y-2*x)。當y-2*x是4的倍數的話我們可以直接(1,2)(-1,2)這個跳可以在(y-2*x)/2步到達。餘數為1,就是(0,0)到(0,1)的問題,但是這個需要三步不是最優的,我們後撤兩步變為(0,0)到(0,5),我們可以三步達到,那麼就是原先的步數加上1就是解。餘數為2,我們可以分別跳一次(2,1)(-2,1)到達。餘數為3,轉化為(0,0)到(0,3)的問題我們可以(-1,2)(1,1)(0,3)三步到達。以上就是全部情況,o(╯□╰)o,在紙上畫畫,應該所有在這這幾類範圍內。**/#include<stdio.h>#include<iostream>#include<string.h>#include<algorithm>#include<math.h>using namespace std;#define N 20100int main(){    int x, y, ans;    char s[110];    while(scanf("%s", s), strcmp(s, "END"))    {        sscanf(s, "%d", &x);        scanf("%d", &y);        x=abs(x);        y=abs(y);        if(x>y)swap(x, y);        if(y==x*2)        {            printf("%d\n", (x+y)/3);            continue;        }        if(y<=2*x)        {            if(x==1&&y==1)                ans = 2;            else if(x==2&&y==2)                ans = 4;            else                ans = (x+y)/3+(x+y)%3;        }        else        {            ans=x;            int c=(y-2*x)%4;            ans+=c;            ans+=(y-2*x-c)/2;            if(y==1&&x==0)                ans=3;        }        printf("%d\n",ans);    }    return 0;}

 

Knight's Trip---hdu3766(馬走日求最小走的步數)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.