约瑟夫环问题(vector模拟过程)
1862: zbj的狼人殺
Time Limit: 1 Sec Memory Limit: 128 MB
[Submit][Status][Web Board]
Description
這天zbj和小伙伴總共n個(gè)人出去玩狼人殺,玩的正開(kāi)心的時(shí)候又來(lái)了一群人總共n個(gè),硬是要跟他們一起玩,所以他們想了一個(gè)游戲規(guī)則準(zhǔn)備趕走他們。規(guī)則是這樣的,所有人坐在圓桌旁,從第一個(gè)人開(kāi)始報(bào)數(shù),數(shù)到第m個(gè)人,則這個(gè)人出局;然后從出局的人之后開(kāi)始數(shù)數(shù),再將數(shù)到的第m個(gè)人出局…依次方法不斷出局,直到最后只剩n個(gè)人,這時(shí)候,zbj希望剩下的n個(gè)人是他和他的小伙伴們,試問(wèn)預(yù)先應(yīng)該怎么安排座位,能使得他完成心愿?
Input
多組數(shù)據(jù),每組數(shù)據(jù)輸入:人數(shù)n(<=100000)、步長(zhǎng)m(<=32767);
Output
對(duì)于每一組數(shù)據(jù),輸出2n個(gè)大寫(xiě)字母,‘A’表示zbj和他的小伙伴,‘B’表示外來(lái)的那群人,50個(gè)字母為一行,不允許出現(xiàn)空白字符。相鄰數(shù)據(jù)間留有一空行。
Sample Input
2 3
2 4
Sample Output
ABBA
BAAB
代碼~:
#include <stdio.h> #include <string.h> #include <string> #include <iostream> #include <vector> using namespace std; char a[200005]; int main() {int n,m;while(~scanf("%d%d",&n,&m)){memset(a,'A',sizeof(a));vector<int>v;for(int i = 1; i <= 2*n; i++)v.push_back(i);int z = 0;for(int i = 0; i < n; i++)//借助vector模擬過(guò)程{z = (z + m - 1) % v.size();a[v[z]] = 'B';//要出局這個(gè)位置站的人應(yīng)該屬于隊(duì)伍Bv.erase(v.begin()+z);//刪除這個(gè)位置模擬這個(gè)位置的人出局}for(int i = 1; i <= 2*n; i++)//模擬找到的位置實(shí)際上都是加一的(因?yàn)?開(kāi)始變成1開(kāi)始){printf("%c",a[i]);}printf("\n\n");}return 0; }總結(jié)
以上是生活随笔為你收集整理的约瑟夫环问题(vector模拟过程)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 字符指针(子串个数统计)
- 下一篇: set的使用