项链
时间:2022-07-25
本文章向大家介绍项链,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
算法提高 项链 描述
由 n(1≤n≤100) 个珠子组成的一个项链,珠子有红、蓝、白三种颜色,各种颜色的珠子的安排顺序由键盘输入的字符串任意给定。蓝色用小写字母b表示,红色用小写字母r表示, 白色用小写字母w表示.
假定从项链的某处将其剪断,把它摆成一条直线。先从左端向右收集同色珠子,遇到第一个异色珠子时停止. 收集过程中, 白色是一种特殊颜色, 既可以看成红色也可以看成蓝色。然后再从剩余珠子的右端向左重复上述过程。
例如:对下图一所示的项链, 如果从图一中标记的位置0处剪断, 则按顺时针顺序得到wbbbwwrrbwbrrwb(如图二所示)。这时从左端开始收集可以得到wbbbww, 共6个珠子;然后从剩余珠子右端开始收集得到wb,共2个珠子。这种剪法共可收集到6+2=8个珠子。 如果从图一中标记的位置4处剪断, 则按顺时针顺序得到wwrrbwbrrwbwbbb(如图二所示)。这时从左端收集可以得到wwrr,共4个珠子;然后从剩余珠子右端收集可以得到wbwbbb,共6个珠子。这种剪法共可收集到4+6=10个珠子。
要求: 在项链中选择合适的剪断位置, 使得从左右两端收集到的珠子数目之和最大,输出收集到的珠子数的最大值M。
输入
输入描述: 由小写字母b,r,w组成的字符串。此字符串记录了一个首尾相接的项链从某处断开后,按顺时针顺序得到的珠子的直线排列。 输入样例:
29 wwwbbrwrbrbrrbrbrwrwwrbwrwrrb
输出
11
输出描述: 收集到的珠子数的最大值 M 分析:字符串模拟,左检索,有检索,特殊情况w仍计数细节把握即可
笔者太菜搞了一小时....
#include <bits/stdc++.h>
using namespace std;
string s;
int n,maxx;
int seek(int x)
{
int cnt=0;
char temp1=s[x],temp2=s[x+1];
for(int i=x;s[i]==temp1||s[i]=='w';i--,cnt++);
for(int i=x+1;s[i]==temp2||s[i]=='w';i++,cnt++);
return cnt;
}
int main()
{
cin>>n;
cin>>s;
s=s+s+s;
for(int i=n;i<2*n;i++)
{
if(s[i]=='w')
{
s[i]='b';
maxx=max(seek(i),maxx);
s[i]='r';
maxx=max(seek(i),maxx);
s[i]='w';
}
maxx=max(seek(i),maxx);
}
maxx=min(n,maxx);
cout<<maxx;
return 0;
}
- ContentProvider简介
- (62) 神奇的序列化 / 计算机程序的思维逻辑
- js的回调函数详解
- 用Python实现微信接口(一)
- MYSQL常见错误及其解决方式
- 用Python实现微信接口(二)
- (63) 实用序列化: JSON/XML/MessagePack / 计算机程序的思维逻辑
- Quartz作业调度框架
- Oracle系统表整理+常用SQL语句收集
- Webpack 实用技巧高效实战
- oracle表空间不足相关问题解决办法
- 手工打造分布式爬虫
- (64) 常见文件类型处理: 属性文件/CSV/EXCEL/HTML/压缩文件 / 计算机程序的思维逻辑
- org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter与org.apache.struts2.dispatcher.
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Flutter框架分析(三)-- Widget,Element和RenderObject
- 傅里叶变换的图像应用--学好了用处大~
- Flutter框架分析(四)-- Flutter框架的运行
- R海拾遗-流程图prismadiagramR
- R海拾遗-单项重复测量方差分析
- R海拾遗-双因素重复测量方差分析
- 小白秒变大神--windows窗口+装B神器大全 两部曲
- R海拾遗-三因素重复
- 推荐一种简单的在Flutter中分离View与Model的方法
- R海拾遗-tidyverse
- Flutter Hooks 使用及原理
- ggplot2_总纲
- 聊聊怎样学习Binder
- ggplot2_散点图
- 你真的理解Binder“一次拷贝“吗?