当前位置: 首页 > news >正文

hdu 4841 圆桌问题(STL vector)

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
 

 

Source
AHOI1999

题意:中文题就不用了

思路:

       首先需要一个vector保存每个人,然后是一个vis数组来标记。

       找n个人,所以循环n次。定义一个cnt=0,每一次cnt+=m-1,

       如果cnt<=当前的总人数,则将v.erasev.begin()+cnt),visv.cnt】】=1,当前人数-1

      如果cnt>=当前人数,cnt%=(当前的总人数),v.erasev.begin()+cnt),visv.cnt】】=1,当前人数-1

      Visi=1 Bvisi=0G

 
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<vector>
 5 #include<set>
 6 #include<algorithm>
 7 using namespace std;
 8 #define N 100000
 9 int n,m;
10 vector<int> v;
11 int vis[N];
12 int main()
13 {
14     while(scanf("%d%d",&n,&m)==2)
15     {
16         v.clear();
17         memset(vis,0,sizeof(vis));
18         int now=2*n;//总共的人数,下标从0开始 
19         
20         for(int i=0;i<now;i++)//初始化vector数组 
21           v.push_back(i);
22           
23         int cnt=0;  
24           for(int i=0;i<n;i++)
25           {
26               cnt=cnt+m-1;//当前的坏人
27             if(cnt<now)
28             {
29                 vis[v[cnt]]=1;//将这个坏人标记为1 
30                 v.erase(v.begin()+cnt);
31             } 
32             else 
33             {
34                 cnt=cnt%now;
35                 vis[v[cnt]]=1;//将这个坏人标记为1 
36                 v.erase(v.begin()+cnt);
37             }
38             now--;
39           }
40           
41           for(int i=0;i<2*n;i++)
42           {
43               if(i%50==0 && i!=0)
44                   printf("\n");
45               if(vis[i])
46                 printf("B");
47                  else 
48                    printf("G");
49           }
50           printf("\n");
51           printf("\n");
52           
53 
54         
55     }
56     return 0;
57 }
View Code

 

 

 

相关文章:

  • WPF获取窗口句柄
  • PHP面向对象static和const的两段代码示例
  • 安卓飞机大战(二) SurfaceView实现自制背景
  • PHP基础知识
  • JLOI 2013 卡牌游戏
  • Andriod下载源码导入后AndroidManifest.xml小红叉的解决办法
  • IE浏览器下ajax缓存导致数据不更新的解决方法
  • coredata
  • 一个java实现的简单的4则运算器
  • Opengl中矩阵和perspective/ortho的相互转换
  • 学习日志---pyhon入门必备
  • 数组作函数参数传递和函数返回值
  • 关于重连测试的一点研究
  • 关于c++字符串的while(*temp++)
  • Java版本的删除指定目录及子目录下名叫“xxx.txt”的所有文件
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • Android开源项目规范总结
  • Brief introduction of how to 'Call, Apply and Bind'
  • Druid 在有赞的实践
  • Java基本数据类型之Number
  • Java教程_软件开发基础
  • JS实现简单的MVC模式开发小游戏
  • nginx 负载服务器优化
  • orm2 中文文档 3.1 模型属性
  • PAT A1092
  • Promise面试题,控制异步流程
  • python_bomb----数据类型总结
  • Spring核心 Bean的高级装配
  • v-if和v-for连用出现的问题
  • vue-router 实现分析
  • vue的全局变量和全局拦截请求器
  • vue--为什么data属性必须是一个函数
  • 深度学习入门:10门免费线上课程推荐
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 阿里云服务器购买完整流程
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (转)用.Net的File控件上传文件的解决方案
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • [20150904]exp slow.txt
  • [Bugku]密码???[writeup]
  • [c#基础]DataTable的Select方法
  • [C++][数据结构][算法]单链式结构的深拷贝
  • [CareerCup] 2.1 Remove Duplicates from Unsorted List 移除无序链表中的重复项
  • [Cocoa]iOS 开发者账户,联机调试,发布应用事宜
  • [github全教程]github版本控制最全教学------- 大厂找工作面试必备!
  • [HNCTF 2022 WEEK2]easy_include 文件包含遇上nginx
  • [Java]快速入门二叉树,手撕相关面试题
  • [LeetCode][LCR178]训练计划 VI——使用位运算寻找数组中不同的数字
  • [NHibernate]一对多关系(关联查询)
  • [NOIP2018 PJ T4]对称二叉树
  • [QT]抄—影像显示实验