题目地址

hdu4841

题干

代码和解释

解本题时使用了刚学的STL vector,注意hdu不支持万能头文件#include<bits/stdc++.h>,所以要记得使用#include<vector>

这里是c++代码。

#include<iostream>
#include<vector>
using namespace std;
int main()
{
int n,m;
int i,j;
int pos;
vector<int> start;
while(~scanf("%d%d",&n,&m)){
start.clear();
//初始化
for(i=0;i<2*n;i++){
start.push_back(i);
/*数组每个元素存储自己的位置,
这样即使删掉了元素后,Good guy的初始位置这个信息还能保留*/
} pos = 0; //删除坏人
for(i=0;i<n;i++){//一共n个坏人
pos=(pos+m-1)%start.size();
//因为是环形的,所以位置取模
//因为把本身当做1来数,数到第m个,所以要减去1
//2printf("%d\n",pos);
start.erase(start.begin()+pos);
} j=0;
//输出结果
for(i=0;i<2*n;i++){
if(i==start[j]&&j<n){
//注意这里一定要写&&j<n,因为这个问题一直wa。
//因为start的size已经为n了,当j超出这个size后必然会出错
//start里存储了Good guy的位置,共n个Good guy
printf("G");
j++;
}
else{
printf("B");
}
if(i!=0&&(i+1)%50==0){
//一行有50个字母
//注意这里不能写成i%49==0,不然差的越来越多
printf("\n");
}
} //相邻数据间留1空行
if(n%50!=0){
printf("\n");
}
printf("\n"); }
return 0;
}
}

本题的两个思考点是:

1.环形桌子,到末尾又回到开头。使用取模来实现。

2.如何在删除了坏人元素后保留好人位置的信息。一开始将位置信息存入数组中来实现。

本题的输出格式也比较苛刻,要注意换行的数量。

每行输出50个字母:

参考

功能 例子 说明
定义int型数组 vector a; 默认初始化,a为空
vector b(a); 用a定义b
vector a(100); a有100个值为0的元素
vector a(100,6); 100个值为6的元素
定义string型数组 vector a(10,"null"); 100个值为6的元素
vector vec(10,"hello"); 10个值为hello的元素
vector b(a.begin().a.end()); b是a的复制
定义结构型数组 struct point{int x,y;}
vector a;
a用来存坐标
功能 例子 说明
赋值 a.push_back(100); 在尾部添加元素
元素个数 int size = a.size(); 元素个数
是否为空 bool isEmpty = a.empty(); 判断是否为空
打印 cout<<a[0]<<endl; 打印第一个元素
中间插入 a.insert(a.begin()+i,k); 在第i个元素前面插入k
尾部插入 a.push_back(8); 尾部插入值为8的元素
尾部插入 a.insert(a.end(),10,5); 尾部插入10个值为5的元素
删除尾部 a.pop_back(); 删除末尾元素
删除区间 a.erase(a.begin()+i,a.begin()+j); 删除区间[i,j-1]的元素
删除元素 a.erase(a.begin()+2); 删除第3个元素
调整大小 a.resize(n) 数组大小变为n
清空 a.clear();
翻转 reverse(a.begin(),a.end()); 用函数reverse翻转数组
排序 sort(a.begin(),a.end()); 用函数sort排序,从小到大

hdu4841 圆桌问题[STL vector]的更多相关文章

  1. C++ STL vector容器学习

    STL(Standard Template Library)标准模板库是C++最重要的组成部分,它提供了一组表示容器.迭代器.函数对象和算法的模板.其中容器是存储类型相同的数据的结构(如vector, ...

  2. STL vector

    STL vector vector是线性容器,它的元素严格的按照线性序列排序,和动态数组很相似,和数组一样,它的元素存储在一块连续的存储空间中,这也意味着我们不仅可以使用迭代器(iterator)访问 ...

  3. STL vector用法介绍

    STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和f ...

  4. STL vector+sort排序和multiset/multimap排序比较

    由 www.169it.com 搜集整理 在C++的STL库中,要实现排序可以通过将所有元素保存到vector中,然后通过sort算法来排序,也可以通过multimap实现在插入元素的时候进行排序.在 ...

  5. STL vector 用法介绍

    介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通 ...

  6. STL vector使用方法介绍

    介绍 这篇文章的目的是为了介绍std::vector,怎样恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通 ...

  7. stl——vector详解

    stl——vector详解 stl——vector是应用最广泛的一种容器,类似于array,都将数据存储于连续空间中,支持随机访问.相对于array,vector对空间应用十分方便.高效,迭代器使ve ...

  8. C++STL vector详解(杂谈)

    介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通 ...

  9. C++ stl vector介绍

    转自: STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if ...

随机推荐

  1. ES6数组方法总结

    关于数组中forEach() .map().filter().reduce().some().every()的总结 1. forEach() let array = [1,2,3,4]; array. ...

  2. js正则表达式(七)

    一.正则表达式对象的创建方法一:使用构造函数的形式: var pattern = new RegExp('正则表达式','修饰符'); var pattern = new RegExp('hello' ...

  3. 木马防杀 花指令 OllyDbg

    打开木马 入口地址 添加花指令 全0的地方,可以插入花指令 保存为可执行文件 随便选择几行,右击 保存文件

  4. Python实现柱状图【数字精准展示,使用不同颜色】

    一.简介 主要使用matplotlib基于python的可视化组件实现. 二.代码实现 # -*- coding: utf-8 -*- """ Created on Mo ...

  5. NT Kernel & System (ntoskrnl)占用80端口

    释放80端口 netstat -ano|findstr "80" 查询占用的进程 , PID =4 发现是system进程 无法直接kill. 1. 关闭iis的默认网站的80端口 ...

  6. ubuntu16.04重置root密码

    问题描述: 一个用户不能G附加多个用户组,在centos没有问题的.具体的还不清楚 问题解决:   重启进入启动项修改启动参数进入root中设置密码 参考: https://www.cnblogs.c ...

  7. sphinx中文版Coreseek中文检索引擎安装和使用方法(Linux)

    sphinx中文版Coreseek中文检索引擎安装和使用方法(Linux)     众所周知,在MYSQL数据库中,如果你在百万级别数据库中使用 like 的话那你一定在那骂娘,coreseek是一个 ...

  8. VLAN实验5:利用三层交换机实现VLAN间路由

    实验环境: 实验拓扑图:   实验编址: 实验步骤:1.基本配置按照实验编址表在PC上进行基本的IP地址配置,三层交换机上先不做任何配置. 测试PC1与PC2的连通性 正常 测试PC1与PC3的连通性 ...

  9. 百度语音合成api/sdk及demo

    1.流程 1)换取token 用Api Key 和 SecretKey.访问https://openapi.baidu.com/oauth/2.0/token 换取 token // appKey = ...

  10. Multi-Task Feature Learning for Knowledge Graph Enhanced Recommendation(知识图谱)

    知识图谱(Knowledge Graph,KG)可以理解成一个知识库,用来存储实体与实体之间的关系.知识图谱可以为机器学习算法提供更多的信息,帮助模型更好地完成任务. 在推荐算法中融入电影的知识图谱, ...