码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-02-05 21:49:21      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:一个人   ras   tor   text   table   建立   iostream   构造   容器   

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

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

标签:一个人   ras   tor   text   table   建立   iostream   构造   容器   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!