51Nod1534 棋子遊戲

2022-02-02 16:56:39 字數 1024 閱讀 5562

原題位址

簡單博弈論。

簡單情況下,即假設不發生乙個棋子阻擋另乙個棋子的去路,那麼情況非常簡單,兩人都必須走完\(x+y\)的路程,先手一次可以走一步,所以時間也為\(x+y\),後手可以先一直讓\(x,y\)都減一,乙個消耗完後再讓另乙個參量一步減一。這一部分的**:

int sum1=x1+y1,sum2=min(x2,y2);

x2-=sum2;y2-=sum2;

sum2+=x2+y2;

if(sum1<=sum2) printf("polycarp");

else printf("vasiliy");

那麼有遮擋時情況麻煩一些。我們要判斷何時有遮擋以及遮擋會對二者產生什麼影響這兩件事。

首先,若兩人都沒有斜著走這種操作,不可能發生遮擋,因為最短路線有好幾條,哪怕對手故意要擋自己亦可以繞開。

那麼現在後手可以斜著走了,那麼我們就可以發現若先手兩座標均小於後手的,就可以在後手斜著走時將他攔下,因為先手到後手斜徑的路程一定小於等於後手走到那裡要用的步數。

這樣的話我們就需要在前邊那部分**之前加乙個這種情況的判斷。

if(x1<=x2&&y1<=y2)
#includeusing namespace std;

int main()

int sum1=x1+y1,sum2=min(x2,y2);

x2-=sum2;y2-=sum2;

sum2+=x2+y2;

if(sum1<=sum2) printf("polycarp");

else printf("vasiliy");

return 0;

}

幸甚至哉,歌以詠志。

51nod1534 棋子遊戲

1534 棋子遊戲 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 還有一些其它的限制,他們不能把棋子移動到x或y為負的座標,或者移動到已經被對手佔據的座標。最先到達 0,0 的人獲勝。現在給定他們棋子的座標,判斷一下誰會獲勝。input 單組測試資料。第一行包含...

51nod1534 棋子遊戲

思路分析 我們先考慮,vasiliy是比polycarp有優勢的,他可以在沒有阻攔且在未到邊界的情況下一次走出polycarp兩次的路,所以我們的polycarp想要獲勝就有了兩種方法,第一種是在vasiliy盡可能多的走斜邊的情況下polycarp步數仍然較少,此時由於polycarp走的相對較慢...

51nod 1534棋子遊戲 分析

polycarp 題解 這種題應該可以想到是進行分析,簡化邏輯的一類題。需要的就是多舉出幾組樣例,從中找到某種潛在的規律,從而簡化題目邏輯。這道題的話,可以發現p獲勝有兩種情況 第一 我們定義v和p到達 0,0 需要的最短時間為tv,tp,那麼顯然有tv max xv,yv tp xp yp.所以第...