hdu 4841 圆桌问题(STL vector)
2015-08-14 16:33
513 查看
[align=left]Problem Description[/align]
圆桌上围坐着2n个人。其中n个人是好人,另外n个人是坏人。如果从第一个人开始数数,数到第m个人,则立即处死该人;然后从被处死的人之后开始数数,再将数到的第m个人处死……依此方法不断处死围坐在圆桌上的人。试问预先应如何安排这些好人与坏人的座位,能使得在处死n个人之后,圆桌上围坐的剩余的n个人全是好人。
[align=left]Input[/align]
多组数据,每组数据输入:好人和坏人的人数n(<=32767)、步长m(<=32767);
[align=left]Output[/align]
对于每一组数据,输出2n个大写字母,‘G’表示好人,‘B’表示坏人,50个字母为一行,不允许出现空白字符。相邻数据间留有一空行。
[align=left]Sample Input[/align]
2 3
2 4
[align=left]Sample Output[/align]
GBBG
BGGB
[align=left]Source[/align]
AHOI1999
题意:中文题就不用了
思路:
首先需要一个vector保存每个人,然后是一个vis数组来标记。
找n个人,所以循环n次。定义一个cnt=0,每一次cnt+=m-1,。
如果cnt<=当前的总人数,则将v.erase(v.begin()+cnt),vis【v.【cnt】】=1,当前人数-1;
如果cnt>=当前人数,cnt%=(当前的总人数),v.erase(v.begin()+cnt),vis【v.【cnt】】=1,当前人数-1;
Vis【i】=1 为B,vis【i】=0为G
View Code
圆桌上围坐着2n个人。其中n个人是好人,另外n个人是坏人。如果从第一个人开始数数,数到第m个人,则立即处死该人;然后从被处死的人之后开始数数,再将数到的第m个人处死……依此方法不断处死围坐在圆桌上的人。试问预先应如何安排这些好人与坏人的座位,能使得在处死n个人之后,圆桌上围坐的剩余的n个人全是好人。
[align=left]Input[/align]
多组数据,每组数据输入:好人和坏人的人数n(<=32767)、步长m(<=32767);
[align=left]Output[/align]
对于每一组数据,输出2n个大写字母,‘G’表示好人,‘B’表示坏人,50个字母为一行,不允许出现空白字符。相邻数据间留有一空行。
[align=left]Sample Input[/align]
2 3
2 4
[align=left]Sample Output[/align]
GBBG
BGGB
[align=left]Source[/align]
AHOI1999
题意:中文题就不用了
思路:
首先需要一个vector保存每个人,然后是一个vis数组来标记。
找n个人,所以循环n次。定义一个cnt=0,每一次cnt+=m-1,。
如果cnt<=当前的总人数,则将v.erase(v.begin()+cnt),vis【v.【cnt】】=1,当前人数-1;
如果cnt>=当前人数,cnt%=(当前的总人数),v.erase(v.begin()+cnt),vis【v.【cnt】】=1,当前人数-1;
Vis【i】=1 为B,vis【i】=0为G
#include<iostream> #include<cstdio> #include<cstring> #include<vector> #include<set> #include<algorithm> using namespace std; #define N 100000 int n,m; vector<int> v; int vis ; int main() { while(scanf("%d%d",&n,&m)==2) { v.clear(); memset(vis,0,sizeof(vis)); int now=2*n;//总共的人数,下标从0开始 for(int i=0;i<now;i++)//初始化vector数组 v.push_back(i); int cnt=0; for(int i=0;i<n;i++) { cnt=cnt+m-1;//当前的坏人 if(cnt<now) { vis[v[cnt]]=1;//将这个坏人标记为1 v.erase(v.begin()+cnt); } else { cnt=cnt%now; vis[v[cnt]]=1;//将这个坏人标记为1 v.erase(v.begin()+cnt); } now--; } for(int i=0;i<2*n;i++) { if(i%50==0 && i!=0) printf("\n"); if(vis[i]) printf("B"); else printf("G"); } printf("\n"); printf("\n"); } return 0; }
View Code
相关文章推荐
- 近期一些想法
- 原生js螺旋运动
- Struts2+Kindeditor整合图片上传
- 逃生 HDU杭电4857 【反向拓扑+优先队列+反向输出】
- Java泛型
- FLUME日志收集系统搭建
- CSU 1204 Rectangles (二分)
- 云端iclound使用-陈棚
- 'System.Web.Http.GlobalConfiguration' does not contain a definition for 'Configure'
- hadoop SequenceFile介绍 大数据 存储
- [Leetcode]String to Integer (atoi)
- ternary searching tree三叉搜索树
- 斐波那契序列 集锦 矩阵乘法
- C++ 运算符重载(1)
- 如何实现一个malloc
- 使用Memory Analyzer Tool(MAT)Eclipse插件分析内存泄露
- SQLiteOpenHelper数据库的创建or升级or增删改查
- Win10技巧:勾掉这几个选项更优体验win10
- CheungSSH国产自动化运维工具开源Web界面
- webservice SoapHeader 验证