圓桌上圍坐著2n個人。其中n個人是好人,另外n個人是壞人。如果從第乙個人開始數數,數到第m個人,則立即處死該人;然後從被處死的人之後開始數數,再將數到的第m個人處死……依此方法不斷處死圍坐在圓桌上的人。試問預先應如何安排這些好人與壞人的座位,能使得在處死n個人之後,圓桌上圍坐的剩餘的n個人全是好人。
多組資料,每組資料輸入:好人和壞人的人數n(<=32767)、步長m(<=32767);
對於每一組資料,輸出2n個大寫字母,『g』表示好人,『b』表示壞人,50個字母為一行,不允許出現空白字元。相鄰資料間留有一空行。
2 32 4
gbbg
bggb
典型的約瑟夫問題。基本思路:在vector向量中儲存2n個連續的整數代表位置,來模擬整個圓桌,根據題目要求,刪掉第m個數(代表處死的壞人位置),直至只剩下n個數(代表好人的位置)。最後定義乙個變數從最初2n個數最小的那個數開始遞增,相當於每次遍歷乙個位置,與vector中的對應位置的值作比較,相等則代表此處原先坐著好人,否則此處原先坐著壞人。也就是找到該被處死的位置,再把壞人插到該些位置。
要注意輸入輸出的格式,一定不能馬虎。
ac**(c++):
#includeusing namespace std;
int main(){
vectortable; //模擬圓桌
int n,m;
while(~scanf("%d%d",&n,&m)){
table.clear();
for(int i=0;i用vector向量模擬的好處就是可以在刪除中間的元素後,後面的元素自動向前靠攏補位,省去了普通陣列要考慮空位或自己編寫補位程式的麻煩。
HDU 4841 圓桌問題
acm模版 這個題簡單的來就是暴力列舉約瑟夫環,當然,太暴力也不好,適當的用資料結構優化一下也是有必要的,這裡用向量維護,成功水過。include include include include include using namespace std const int maxn 4e4 const...
HDU 4841 圓桌問題
圓桌上圍坐著2n個人。其中n個人是好人,另外n個人是壞人。如果從第乙個人開始數數,數到第m個人,則立即處死該人 然後從被處死的人之後開始數數,再將數到的第m個人處死 依此方法不斷處死圍坐在圓桌上的人。試問預先應如何安排這些好人與壞人的座位,能使得在處死n個人之後,圓桌上圍坐的剩餘的n個人全是好人。i...
hdu 4841 圓桌問題
題目連線 圓桌問題 problem description 圓桌上圍坐著2n個人。其中n個人是好人,另外n個人是壞人。如果從第乙個人開始數數,數到第m個人,則立即處死該人 然後從被處死的人之後開始數數,再將數到的第m個人處死 依此方法不斷處死圍坐在圓桌上的人。試問預先應如何安排這些好人與壞人的座位,...