中世紀劍士

2021-05-25 11:23:03 字數 445 閱讀 4254

這個題目很有趣

n個人決鬥,兩兩之間有強弱關係,強弱關係不傳遞,例如a>b,b>c,c>a。n個劍士圍成乙個圈,一次抽籤,抽中的人和他右邊的人決鬥,輸了的人出圈。現在問是否存在一種決鬥方式讓第k個人生出,計算可能勝出的的人數和方案。

這個題目讓我想起了圍成乙個圈的猴子的題目,那個題目是約瑟夫問題。

和這個不一樣。

這個題目:乙個人要勝出,則要勝了所有右邊的人,同時也要勝出左邊的人。因為是圍成乙個圈,所以該人勝出的話,最終肯定是自己跟自己相遇。那麼,這種情況下,把圈展開成乙個鏈,將該鏈延長一倍,如果i和i+n可以相遇,則說明i可以勝出。i人向右決鬥,i+n向左決鬥

如果兩個人可以相遇,用meet[i,j]來表示

meet[i,j]= true    if meet[i,k] and meet[k,j] and (e[i,k] or e[j,k])=true

[部落格整理]