HDU4841 圆桌问题【约瑟夫环+模拟+STL】
圆桌问题
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 6757 Accepted Submission(s): 2550
Problem Description
圆桌上围坐着2n个人。其中n个人是好人,另外n个人是坏人。如果从第一个人开始数数,数到第m个人,则立即处死该人;然后从被处死的人之后开始数数,再将数到的第m个人处死……依此方法不断处死围坐在圆桌上的人。试问预先应如何安排这些好人与坏人的座位,能使得在处死n个人之后,圆桌上围坐的剩余的n个人全是好人。
Input
多组数据,每组数据输入:好人和坏人的人数n(<=32767)、步长m(<=32767);
Output
对于每一组数据,输出2n个大写字母,‘G’表示好人,‘B’表示坏人,50个字母为一行,不允许出现空白字符。相邻数据间留有一空行。
Sample Input
2 3
2 4
Sample Output
GBBG
BGGB
问题链接:HDU4841 圆桌问题
问题简述:(略)
问题分析:
约瑟夫环问题,用模拟法来解决。
可以用数组实现模拟,也可以用STL的向量vector实现模拟,也可以用STL的队列queue实现模拟。也许使用STL的链表list也可以实现模拟。
程序说明:(略)
参考链接:(略)
题记:(略)
AC的C++语言程序(数组模拟)如下:
/* HDU4841 圆桌问题 */#include <bits/stdc++.h>using namespace std;const int N = 32767;
const int N2 = 2 * N;
bool flag[N2];int main()
{int n, m;while(~scanf("%d%d", &n, &m)) {memset(flag, true, sizeof(flag));int sum = 2 * n, cur = 0;while(sum > n) {for(int i = 0; i < 2 * n; i++) {if(!flag[i]) continue;if(sum <= n) break;cur++;if(cur == m) {flag[i] = false;cur = 0;sum--;}}}for(int i = 0; i < 2 * n; i++) {putchar(flag[i] ? 'G' : 'B');if((i + 1) % 50 == 0) putchar('\n');}putchar('\n');putchar('\n');}return 0;
}
AC的C++语言程序(使用vector模拟)如下:
/* HDU4841 圆桌问题 */#include <bits/stdc++.h>using namespace std;const int N = 32767;
const int N2 = 2 * N;
bool flag[N2];int main()
{int n, m;while(~scanf("%d%d", &n, &m)) {memset(flag, true, sizeof(flag));vector<int> v(2 * n);for(int i = 0; i < 2 * n; i++) v[i] = i;int cur = 0;while((int)v.size() > n) {cur = (cur + m -1) % v.size();flag[v[cur]] = false;v.erase(v.begin() + cur);}for(int i = 0; i < 2 * n; i++) {putchar(flag[i] ? 'G' : 'B');if((i + 1) % 50 == 0) putchar('\n');}putchar('\n');putchar('\n');}return 0;
}
AC的C++语言程序(使用queue模拟)如下:
/* HDU4841 圆桌问题 */#include <bits/stdc++.h>using namespace std;const int N = 32767;
const int N2 = 2 * N;
bool flag[N2];int main()
{int n, m;while(~scanf("%d%d", &n, &m)) {memset(flag, true, sizeof(flag));queue<int> q;for(int i = 0; i < 2 * n; i++) q.push(i);int cur = 0;while((int)q.size() > n) {if(++cur == m) {flag[q.front()] = false;q.pop();cur = 0;} else {q.push(q.front());q.pop();}}for(int i = 0; i < 2 * n; i++) {putchar(flag[i] ? 'G' : 'B');if((i + 1) % 50 == 0) putchar('\n');}putchar('\n');putchar('\n');}return 0;
}
HDU4841 圆桌问题【约瑟夫环+模拟+STL】相关推荐
- hdu4841 圆桌问题-vector容器模拟
Problem Description 圆桌上围坐着2n个人.其中n个人是好人,另外n个人是坏人.如果从第一个人开始数数,数到第m个人,则立即处死该人:然后从被处死的人之后开始数数,再将数到的第m个人 ...
- 7-5 模拟报数游戏(约瑟夫环问题):有n个人围成一圈从1开始按顺序编号从第一个人开始从1到k报数,报到k的人退出圈子;然后圈子缩小,下一个人继续,问最后留下的是第几号(只留1 人)。要求定义函数
学习记录与分享 PTA程序设计类教学平台-Python作业二(循环结构程序设计) 题目 7-5 模拟报数游戏(约瑟夫环问题) 有n个人围成一圈,从1开始按顺序编号,从第一个人开始从1到k报数,报到k的 ...
- 链表基础操作 / 循环链表约瑟夫环/STL链表基本操作
链表的基础操作 程序功能 输入几 就把几调到数最前面 程序步骤: 1.插入函数 2.初始化函数 3.删除节点 4.把排列展示出来 程序注意 不同函数的指针 不同 头指针定义为全局变量 代码实现截图 # ...
- 约瑟夫环问题(圆桌问题)
约瑟夫环 约瑟夫是犹太军队的一个将军,在反抗罗马的起义中,他所率领的军队被击溃,只剩下残余的部队40余人,他们都是宁死不屈的人,所以不愿投降做叛徒.一群人表决说要死.所以用一种策略来先后kill所有人 ...
- PHP解决约瑟夫环问题
PHP解决约瑟夫环问题 一.总结 二.PHP解决约瑟夫环问题 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到 ...
- 约瑟夫环之循环链表实现
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列:他的下一个人又从1开 始报数,数到m的那个人又出列:依此规律 ...
- 约瑟夫环-(数组、循环链表、数学)
约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数,数到m的那个人又出 ...
- 动态规划解决约瑟夫环问题
题目: 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号0,1,2,3-n-1分别表示)围坐在一张圆桌周围.从编号为0的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数,数到m ...
- python约瑟夫环算法和流程图_约瑟夫环问题及python与c++实现效率对比
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重 ...
最新文章
- 用html CSS实现砸金蛋,css3+js 实现砸金蛋效果
- cocos2dx 3.3final UserDefault有个坑?
- boost::container实现扩展bwd测试分配器程序
- BZOJ 4720 [Noip2016]换教室
- Android安装两次才成功,Android应用从市场安装完成打开与桌面打开,被启动两次的问题...
- Java从零基础到精通教程全套视频课程
- web 开发之js---页面缓存, jsp 缓存, html 缓存, ajax缓存,解决方法
- pandas切片操作
- VOIP侵蚀电信利益,未来最赚钱的行业.
- android课程设计时钟,单片机制作的电子钟(含闹钟功能)课程设计报告
- mifare classic 2.2.3中文_Adobe Lightroom Classic CC 2019 v8.4.1 中文完整直装版
- 一次外网打不开网站的故障总结
- c#设计模式之简单工厂
- C++ STL 源码剖析之 Traits 编程技法
- vcpkg:使用 vcpkg
- koreader下载_kindle koreader
- 各种浏览器怎么换ip
- jQuery弹出层插件Dialog
- SpaceSyntax【空间句法】之DepthMapX学习:第三篇 软件介绍与一般分析流程图
- java毕业设计汽车售后服务管理系统源码+lw文档+mybatis+系统+mysql数据库+调试
热门文章
- Ubuntu snap for 树莓派
- Spring如何配置bean属性
- chrome浏览器的跨域设置
- 网页游戏为什么容易赚钱?(From:07073)
- 如何把平板的虚拟键盘关掉_想知道Win10电脑启动使用的是BIOS还是UEFI,这该如何分辨?...
- c语言中状态机的作用,C语言中的状态机
- java抽象类的字段_java打印出继承体系的类(包括抽象类)、接口、域字段
- 【HIVE 之 DDL,DML】
- localhost 拒绝了我们的连接请求。_Zipkin请求链路日志聚合
- Linux基础——搭建自己的云计算, 多电脑共享你云端文件