hdu 4841 圆桌问题 | 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

思路

使用0,1,2,3...2n-1表示这2n个人的编号,并将这2n个人储存在vector中。我们的任务是要找出坏人的编号并将其从vector中去除。确定坏人
编号时,注意由于是圆形桌面,需要求模的运算。

知识点

vector用法

  • 构造
例子 解释
vector a 定义一个名为a的int类型的vector,初始内容为空
vector a(100, "demo") 定义一个名为a的string类型的vector,大小为100,每个值都是"demo"
  • 方法

假设已经建立了一个名为v的vector。

例子 解释
v.front() 返回第一个元素
v.back() 返回最后一个元素
v.empty() 检查是否为空
v.size() 返回vector大小
v.clear() 清空vector
v.push_back(6) 尾部插入一个6
v.insert(v.begin()+i, 6) 在原下标为i的元素前方插入一个6
v.pop_back() 删除尾部元素
v.erase(v.begin() + 2) 删除下标为2的元素
v.clear() 清空vector

代码

#include <iostream>
#include <vector>
#include <cstdlib>
using namespace std;

vector <int> desk;

int main(){
    int n, m;
    while (~scanf ("%d %d", &n, &m)){
        desk.clear();
        for (int i=0;i<2*n;i++) desk.push_back(i);
        int pos = 0;
        for (int i=0;i<n;i++){
            pos = (pos + m - 1) % desk.size();
            desk.erase(desk.begin() + pos);
        }
        int cnt = 0;
        for (int i=0;i<2*n;i++){
            if (i % 50 == 0 && i != 0) printf("\n");
            if(desk[cnt] == i && cnt < desk.size()){
                cnt++;
                printf("G");
            }
            else printf("B");
    }
    printf("\n\n");
    }
    return 0;
}

原文地址:https://www.cnblogs.com/La-pu-ta/p/12266797.html

时间: 2024-11-01 17:26:37

hdu 4841 圆桌问题 | vector 容器的使用的相关文章

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 用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

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);

Vector容器 和 iteration 迭代器

vector容器 vector是同一种类型的对象的集合,每个对象都有一个对应的整数索引值.和string对象一样,标准库负责管理存储元素的相关内存.我们把vector称为容器,是因为它可以包含其他对象.一个容器中的所有对象都必须是同一种类型的. 使用vector之前,必须包含相应的头文件.#include <vector> using std::vector; vector是一个类模板(class template).模板允许程序员编写单个类或函数定义,这个类和函数定义可用于不同的数据类型上.

vector容器用法详解

vector类称作向量类,它实现了动态数组,用于元素数量变化的对象数组.像数组一样,vector类也用从0开始的下标表示元素的位置:但和数组不同的是,当vector对象创建后,数组的元素个数会随着vector对象元素个数的增大和缩小而自动变化. vector类常用的函数如下所示: 1.构造函数 vector():创建一个空vector vector(int nSize):创建一个vector,元素个数为nSize vector(int nSize,const t& t):创建一个vector,元

谈谈vector容器的三种遍历方法

说明:本文仅供学习交流,转载请标明出处,欢迎转载! vector容器是最简单的顺序容器,其使用方法类似于数组,实际上vector的底层实现就是采用动态数组.在编写程序的过程中,常常会变量容器中的元素,那么如何遍历这些元素呢?本文给出三种遍历方法. 方法一:采用下标遍历 由于vector容器就是对一个动态数组的包装,所以在vector容器的内部,重载了[]运算符,函数原型为:reference operator [] (size_type n);所以我们可以采用类似于数组的方式来访问vector容

C++ STL vector容器学习

STL(Standard Template Library)标准模板库是C++最重要的组成部分,它提供了一组表示容器.迭代器.函数对象和算法的模板.其中容器是存储类型相同的数据的结构(如vector,list, deque, set, map等),算法完成特定任务,迭代器用来遍历容器对象,扮演容器和算法之间的胶合剂. 模板类vector 在计算中,矢量(vector)对应数组,它的数据安排以及操作方式,与array非常类似.在C++中,使用vector模板类时,需要头文件包含#include<v

STL学习二:Vector容器

1.Vector容器简介 vector是将元素置于一个动态数组中加以管理的容器. vector可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲). vector尾部添加或移除元素非常快速.但是在中部或头部插入元素或移除元素比较费时. 2.vector对象的默认构造 vector采用模板类实现,vector对象的默认构造形式 vector<T> vecT; vector<int> vecInt;          //一个存放int的vector容器

ACM学习历程—BestCoder 2015百度之星资格赛1002 列变位法解密(vector容器)

Problem Description 列变位法是古典密码算法中变位加密的一种方法,具体过程如下 将明文字符分割成个数固定的分组(如5个一组,5即为密钥),按一组一行的次序整齐排列,最后不足一组不放置任何字符,完成后按列读取即成密文. 比如: 原文:123456789 密钥:4 变换后的矩阵: 1234 5678 9xxx (最后的几个x表示无任何字符,不是空格,不是制表符,就没有任何字符,下同) 密文:159263748 再比如: 原文:Hello, welcome to my dream w