hdu 4841 圓桌問題

2021-10-18 22:42:04 字數 1339 閱讀 3134

題目連線: 圓桌問題

problem description

圓桌上圍坐著2n個人。其中n個人是好人,另外n個人是壞人。如果從第乙個人開始數數,數到第m個人,則立即處死該人;然後從被處死的人之後開始數數,再將數到的第m個人處死……依此方法不斷處死圍坐在圓桌上的人。試問預先應如何安排這些好人與壞人的座位,能使得在處死n個人之後,圓桌上圍坐的剩餘的n個人全是好人。

input

多組資料,每組資料輸入:好人和壞人的人數n(<=32767)、步長m(<=32767);

output

對於每一組資料,輸出2n個大寫字母,『g』表示好人,『b』表示壞人,50個字母為一行,不允許出現空白字元。相鄰資料間留有一空行。

sample input

2 32 4

sample output

gbbg

bggb

解析:

1.輸入n(總人數一半)和m(移動步長)

2.定義vector記錄每個人的初始位置,長度為2n

3. 設定指標cnt = 0,開始迴圈:

(1)移動指標:cnt=(cnt+m-1)%v.size();

(2)刪除元素:v.erase(v.begin()+cnt);

刪除到只剩下一半元素的時候結束迴圈

4. 結束上述迴圈以後,vector只剩下好人的初始位置

5. 初始化字元陣列a的值長度為2n,值全部為「b"

6. 根據vector儲存的好人的位置,在相應位置更改為「g"

code:

#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

const ll n=

1e6;

vector v;

char a[n]

;int

main()

vector

::iterator it;

for(it=v.

begin()

;it!=v.

end(

);it++

)for

(int i=

0;i<

2*n;i++)if

(2*n%50!=0

) cout

}

HDU 4841 圓桌問題

acm模版 這個題簡單的來就是暴力列舉約瑟夫環,當然,太暴力也不好,適當的用資料結構優化一下也是有必要的,這裡用向量維護,成功水過。include include include include include using namespace std const int maxn 4e4 const...

hdu4841 圓桌問題

圓桌上圍坐著2n個人。其中n個人是好人,另外n個人是壞人。如果從第乙個人開始數數,數到第m個人,則立即處死該人 然後從被處死的人之後開始數數,再將數到的第m個人處死 依此方法不斷處死圍坐在圓桌上的人。試問預先應如何安排這些好人與壞人的座位,能使得在處死n個人之後,圓桌上圍坐的剩餘的n個人全是好人。多...

HDU 4841 圓桌問題

圓桌上圍坐著2n個人。其中n個人是好人,另外n個人是壞人。如果從第乙個人開始數數,數到第m個人,則立即處死該人 然後從被處死的人之後開始數數,再將數到的第m個人處死 依此方法不斷處死圍坐在圓桌上的人。試問預先應如何安排這些好人與壞人的座位,能使得在處死n個人之後,圓桌上圍坐的剩餘的n個人全是好人。i...