hdu 4841 圆桌问题

最近写广搜,突发奇想看能不能用队列来模拟约瑟夫问题,然后就a了这道题,用队列居然比链表慢不了多少。

#include<iostream>
#include<queue>
using namespace std;
int main()
{
	int n,m;
	while(cin>>n>>m)
	{
		int a[2*n];
		queue<int>root;
		for(int i=0;i<2*n;i++)
		{
			a[i]=1;
			root.push(i);
		}
		int sum=0;
		while(root.size()!=n)
		{
			int x=root.front();
			sum++;
			if(sum==m)
			{
				root.pop();
				a[x]=0;
				sum=0;
			}
			else
			{
				root.pop();
				root.push(x);
			}
		}
		for(int i=0;i<2*n;i++)
		{
			if(a[i]) cout<<"G";
			else cout<<"B";
			if((i+1)%50==0) cout<<endl;
		}
		cout<<endl<<endl;
	}
	return 0;
}
时间: 2024-11-06 19:35:18

hdu 4841 圆桌问题的相关文章

hdu 4841 圆桌问题(用vector模拟约瑟夫环)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4841 圆桌问题 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 104    Accepted Submission(s): 17 Problem Description 圆桌上围坐着2n个人.其中n个人是好人,另外n个人是坏人.如果从第一

hdu 4841 圆桌问题 | vector 容器的使用

Problem Description 圆桌上围坐着2n个人.其中n个人是好人,另外n个人是坏人.如果从第一个人开始数数,数到第m个人,则立即处死该人:然后从被处死的人之后开始数数,再将数到的第m个人处死--依此方法不断处死围坐在圆桌上的人.试问预先应如何安排这些好人与坏人的座位,能使得在处死n个人之后,圆桌上围坐的剩余的n个人全是好人. Input 多组数据,每组数据输入:好人和坏人的人数n(<=32767).步长m(<=32767): Output 对于每一组数据,输出2n个大写字母,'G

HDU 4841 : 圆桌问题

圆桌上围坐着2n个人.其中n个人是好人,另外n个人是坏人.如果从第一个人开始数数,数到第m个人,则立即处死该人:然后从被处死的人之后开始数数,再将数到的第m个人处死--依此方法不断处死围坐在圆桌上的人.试问预先应如何安排这些好人与坏人的座位,能使得在处死n个人之后,圆桌上围坐的剩余的n个人全是好人. Input多组数据,每组数据输入:好人和坏人的人数n(<=32767).步长m(<=32767): Output对于每一组数据,输出2n个大写字母,'G'表示好人,'B'表示坏人,50个字母为一行

hdu 4841 用stl::vector解决约瑟夫问题

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4841 约瑟夫问题,确定一个数m,共有n个人,循环报数,数到m就出队,后面的数跟在其后,这是一个典型的链表删除操作的应用,我先用vector写了一中操作方案,vector对于随机访问元素的时间复杂度是O(1),所以便于查询,而链表对于插入和删除的时间复杂度都是O(1),用vector进行删除操作的时间复杂度是O(n)的,用于后续元素的移位. 代码如下: 1 #include<bits/stdc++.h

hdoj 4841 圆桌问题 【模拟】

圆桌问题 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 299    Accepted Submission(s): 107 Problem Description 圆桌上围坐着2n个人.其中n个人是好人,另外n个人是坏人.如果从第一个人开始数数,数到第m个人,则立即处死该人:然后从被处死的人之后开始数数,再将数到的第m个人处死--依

vector的使用-Hdu 4841

圆桌问题 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 6252    Accepted Submission(s): 2380 Problem Description 圆桌上围坐着2n个人.其中n个人是好人,另外n个人是坏人.如果从第一个人开始数数,数到第m个人,则立即处死该人:然后从被处死的人之后开始数数,再将数到的第m个人处死……

HDU4841 圆桌问题 【HDU最烂题】

圆桌问题 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 295    Accepted Submission(s): 105 Problem Description 圆桌上围坐着2n个人.其中n个人是好人,另外n个人是坏人.如果从第一个人开始数数,数到第m个人,则立即处死该人:然后从被处死的人之后开始数数,再将数到的第m个人处死--依

HDU 6203 ping ping ping [LCA,贪心,DFS序,BIT(树状数组)]

题目链接:[http://acm.hdu.edu.cn/showproblem.php?pid=6203] 题意 :给出一棵树,如果(a,b)路径上有坏点,那么(a,b)之间不联通,给出一些不联通的点对,然后判断最少有多少个坏点. 题解 :求每个点对的LCA,然后根据LCA的深度排序.从LCA最深的点对开始,如果a或者b点已经有点被标记了,那么continue,否者标记(a,b)LCA的子树每个顶点加1. #include<Bits/stdc++.h> using namespace std;

HDU 5542 The Battle of Chibi dp+树状数组

题目:http://acm.hdu.edu.cn/showproblem.php?pid=5542 题意:给你n个数,求其中上升子序列长度为m的个数 可以考虑用dp[i][j]表示以a[i]结尾的长度为j的上升子序列有多少 裸的dp是o(n2m) 所以需要优化 我们可以发现dp的第3维是找比它小的数,那么就可以用树状数组来找 这样就可以降低复杂度 #include<iostream> #include<cstdio> #include<cstring> #include