天天看点

HOJ 4841 圆桌问题(stl, 巨水)

stl, 巨水

本题要点:

1、用 vector 来模拟约瑟夫问题

2、注意输出格式,每50个字母就换行。每两个例子之间,有空行。

#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
const int MaxN = 33000;
bool vis[MaxN];
int n, m;

void solve()
{
	vector<int> v;
	memset(vis, false, sizeof vis);
	int cnt = n, mod = 2 * n, indx = -1;
	while(cnt--)
	{
		int j = 0;
		while(j < m)
		{
			indx = (indx + 1) % mod;
			if(!vis[indx])
			{
				++j;
			}
		}
		v.push_back(indx);
		vis[indx] = true;
	}
	memset(vis, false, sizeof vis);
	int len = v.size();
	for(int i = 0; i < len; ++i)
	{
		vis[v[i]] = true;
	}
	cnt = 0;
	for(int i = 0; i < mod; ++i)
	{
		if(vis[i])
		{
			printf("B");
		}else{
			printf("G");
		}
		++cnt;
		if(cnt % 50 == 0)
			printf("\n");
	}
	printf("\n\n");
}


int main()
{
	while(scanf("%d%d", &n, &m) != EOF)
	{
		solve();
	}
	return 0;
}