阳江新农村建设网站/百度seo查询收录查询
这题的期望解法应当是循环链表。
但是先写一种简单做法
思路:
这道题目的本质就是模拟。但是难度主要在于删除人之后,人的总数发生了变化,需要进行维护。
可以借助vector来进行维护,vector自带的erase函数能够删除一个元素并把后面的元素自动的往前挪动。
这样子先把一个vector赋值为1,2,3,4,5……
然后进行模拟,剩下2,4,5……(举例子)是好人。
然后1,2,3,4……如果是好人的位置就输出G,否则为B。
代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
int main()
{int i, j;vector<int> a;int n, m;cin >> n >> m;a.clear();for (i = 0; i < 2 * n; i++)a.push_back(i);int p = 0;for (i = 0; i < n; i++){p = (p + m - 1) % a.size();// 找到这个人的位置 a.erase(a.begin() + p);// 删除 }j = 0;for (i = 0; i < 2 * n; i++){if (!(i % 50) && i)///输出的换行 cout << endl;if (j < a.size() && i == a[j])//如果当前坐标为好人,输出 {j++;cout << "G";}elsecout << "B";}cout << endl<< endl;return 0;
}