NYOJ_268_荷兰国旗问题
荷兰国旗问题
描写叙述
荷兰国旗有三横条块构成,自上到下的三条块颜色依次为红、白、蓝。现有若干由红、白、蓝三种颜色的条块序列。要将它们又一次排列使全部同样颜色的条块在一起。本问题要求将全部红色的条块放最左边、全部白色的条块放中间、全部蓝色的条块放最右边。
输入
第1行是一个正整数n(n<100),表示有n组測试数据。接下来有n行,每行有若干个由R,W,B三种字符构成的字符串序列,当中R,W和B分别表示红、白、蓝三种颜色的条块,每行最多有1000个字符。
输出
对输入中每行上由R。W。B三种字符构成的字符串序列。将它们又一次排列使全部同样颜色的条块在一起,满足前述要求。
例子输入
3
BBRRWBWRRR
RRRWWRWRB
RBRW
例子输出
RRRRRWWBBB
RRRRRWWWB
RRWB
分析:荷兰国旗问题是一个经典的题目。由于仅仅涉及到三种颜色。所以我们能够把红、白、蓝分别用1、2、3三个数字取代。能够把它看做是数组排序问题,而数组元素的值为1、2、3三种。
排好序后数组肯定分为三块区域,前部为1,中部为2,后部为3。如今我们的思路就是把未排序时前部和后部分别排在数组的前面和后面。那么中部自然就排好了。
设置两个标志位head指向数组开头。tail指向数组末尾,now从头開始遍历:
(1)假设遍历到的位置为1。那么它一定是属于前部。于是就和head交换值,然后head++,now++;
(2)假设遍历到的位置为2,说明属于中部,now++;
(3)假设遍历到的位置为3,说明属于后部,于是就和tail交换值,然而。假设此时交换后now指向的值属于前部,那么就运行(1),tail--;
事实上这个题目假设仅仅是解题的话全然不要这样子做,直接计算红、白、蓝三种颜色的数量。然后输出就可以。
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=268
代码清单:
#include<iostream>
#include<algorithm>
using namespace std; const int maxn = 100 + 5; int n;
string str;
int main(){
cin>>n;
while(n--){
cin>>str;
int len=str.size();
int now=0,ans=0;
int head=0,tail=len-1;
while(now<=tail){
if(str[now]=='R'){
swap(str[head],str[now]);
head++;
now++;
}
else if(str[now]=='W'){
now++;
}
else{
swap(str[now],str[tail]);
tail--;
}
}
cout<<str<<endl;
}return 0;
}
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
string s="RWB";
while(n--){
string str;
cin>>str;
int ans[3]={0};
int len=str.size();
for(int i=0;i<len;i++){
if(str[i]=='R') ans[0]++;
else if(str[i]=='W') ans[1]++;
else ans[2]++;
}
for(int i=0;i<3;i++){
for(int j=0;j<ans[i];j++){
cout<<s[i];
}
}cout<<endl;
}return 0;
}
NYOJ_268_荷兰国旗问题的更多相关文章
- 荷兰国旗 Flag of the Kingdom of the Netherlands
问题描述:现有n个红白蓝三种不同颜色的小球,乱序排列在一起,请通过两两交换任意两个球,使得从左至右的球依次为红球.白球.蓝球.这个问题之所以叫做荷兰国旗,是因为将红白蓝三色的小球弄成条状物,并有序排列 ...
- ACM 荷兰国旗问题
荷兰国旗问题 时间限制:3000 ms | 内存限制:65535 KB 难度:1 描述 荷兰国旗有三横条块构成,自上到下的三条块颜色依次为红.白.蓝.现有若干由红.白.蓝三种颜色的条块序列,要 ...
- July收集荷兰国旗问题之三路partition
这道题目和分成两块的partition的扩展.比如有一堆0 1 2 数字组成的数组,要分成 00 00 11 1 1 222 2这样的顺序的. 利用lumoto版的partition能够非常好的解 ...
- 算法笔记_051:荷兰国旗问题(Java)
目录 1 问题描述 2 解决方案 1 问题描述 现有n个红白蓝三种不同颜色的小球,乱序排列在一起,请通过两两交换任意两个球,使得从左至右的球依次为红球.白球.蓝球.这个问题之所以叫荷兰国旗,是因为 ...
- 荷兰国旗问题、快排以及BFPRT算法
荷兰国旗问题 给定一个数组arr,和一个数num,请把小于num的数放数组的左边,等于num的数放在数组的中间,大于num的数放在数组的右边.要求额外空间复杂度O(1),时间复杂度O(N). 这个问题 ...
- Coursera Algorithms week2 基础排序 练习测验: Dutch national flag 荷兰国旗问题算法
第二周课程的Elementray Sorts部分练习测验Interview Questions的第3题荷兰国旗问题很有意思.题目的原文描述如下: Dutch national flag. Given ...
- Java实现荷兰国旗问题
问题描述 现有n个红白蓝三种不同颜色的小球,乱序排列在一起,请通过两两交换任意两个球,使得从左至右的球依次为红球.白球.蓝球.这个问题之所以叫荷兰国旗,是因为将红白蓝三色的小球弄成条状物,并有序排列后 ...
- 快速排序与荷兰国旗及Partition问题
快速排序与荷兰国旗及Partition问题 需求: 1.Partition过程 给定一个数组arr,和一个整数num.请把小于等于num的数放在数组的左边,大于num的数放在数组的右边. 要求额外空间 ...
- java荷兰国旗问题
荷兰国旗包含三种颜色:红.白.蓝. 有三种颜色的球,算法的目标是将这三种球按颜色顺序正确地排列.它其实是三向切分快速排序的一种变种,在三向切分快速排序中,每次切分都将数组分成三个区间:小于切分元素.等 ...
随机推荐
- go之切片
一.概念 关于切片 1.切片是对数组一个连续片段的引用,所以切片是一个引用类型 2.切片是数组一样可以索引,可以通过len函数获取切片的数据长度.(数组也可以通过len获取) 3.切片是一个长度可变的 ...
- SpringCloud 之 Fegin —— 发送GET、POST请求以及文件上传
由于项目需要调用其他微服务的数据,首先想到的就是写一个http网络请求的工具类,但是想到在之前看springCloud的时候里面有这个Fegin可以实现,就顺便实践一下,虽然过程有点坎坷,好在都顺利解 ...
- SQLServer2008 将本地excel导入到远程服务器表
--1.创建链接服务器,相当于创建一个访问远程数据库的快捷方式 exec sp_addlinkedserver 'TestLink', ' ', 'SQLOLEDB ', '111.11.1.111' ...
- SQL server基本语法
此处源于一个基本的SQL Server试题,基本上涵盖了SQL Server的全部基本语法,粘贴在此处,权当分享 --1. 创建TestDB数据库 create database TestDB; ...
- Java_Web之Servlet基础
请简要描述EL表达式的语法及使用特点? ${ EL exprission } ${ bean.name } 或 ${ bean['name'] } 请简要描述什么是JSTL? JSP标准标签库 ...
- 使用JAVA写一个简单的日历
JAVA写一个简单的日历import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateF ...
- eas之获取单据编码规则
//获取单据编码规则 /*** @Title: getNumber* @Description: TODO(获取单据编码规则)* <p>* @date 201 ...
- 【JavaScript游戏开发】使用HTML5+Canvas+JavaScript 封装的一个超级马里奥游戏(包含源码)
这个游戏基本上是建立在JavaScript模块化的开发基础上进行封装的,对游戏里面需要使用到的游戏场景进行了封装,分别实现了Game,Sprite,enemy,player, base,Animati ...
- Java核心技术读书笔记02
第四章 对象和类 类之间的关系 最常见的三种关系 依赖("uses-a") Order依赖Account类看信息 聚合("has-a") Order包含多个It ...
- Keil
Keil C51 V9.00 即09年发布的最新版本uVision 4,版本外观改变比较大,可以使用以前的注册文件.如果全新安装,在VISTA或者WIN 7系统下,请使用管理员方式运行,然后注册即可无 ...