解題思路:題目雖然很長,其實就是乙個約瑟夫環問題,對於輸入的字串,從開始依次進行報數,當報到
n=1999時,刪除對應的字元,字串可以看作是首尾相連的環,直到剩餘最後乙個字元。如果剩餘字元為'?',則輸出結果:
yes;如果剩餘字元為' ',則輸出結果:no;否則輸出結果:no comments .
注意:本題只有一組測試資料,如果寫成輸入多組的形式,會超時的。
view code
1 #include
2 #include
3 #include
4using
namespace std;
5const
int n=1999;
6char str[30005];
7int main()
8 16 t=0;
17for(i=2;i<=k;i++)
18 t=(t+n)%i;
19if(str[t]=='
?') cout<
yes"
<20
else
if(str[t]=='
') cout<
<21
else cout<
no comments
"<22
return
0;23 }
poj 2359 約瑟夫環數學問題
無論是用鍊錶實現還是用陣列實現都有乙個共同點 要模擬整個遊戲過程,不僅程式寫起來比較煩,而且時間複雜度高達o nm 當n,m非常大 例如上百 萬,上千萬 的時候,幾乎是沒有辦法在短時間內出結果的。我們注意到原問題僅僅是要求出最後的勝利者的序號,而不是要讀者模擬整個過程。因此如果要追求效 率,就要打破...
poj 2359 Questions 約瑟夫問題
題意 輸入一對字串,按1999取數,判斷最後剩下的數,是 輸出 yes 是 輸出 no 不然輸出 no comments 分析 約瑟夫環問題。view code include include include include using namespace std string s int n 19...
poj 3517 約瑟夫環。。。。。
無論是用鍊錶實現還是用陣列實現都有乙個共同點 要模擬整個遊戲過程,不僅程式寫起來比較煩,而且時間複雜度高達o nm 當n,m非常大 例如上百萬,上千萬 的時候,幾乎是沒有辦法在短時間內出結果的。我們注意到原問題僅僅是要求出最後的勝利者的序號,而不是要讀者模擬整個過程。因此如果要追求效率,就要打破常規...