若是凉夜已成梦

青春里 总有些事情要努力去做 总有些梦想要拼命去追。


  • 运维

  • 前端

  • 编程

  • 随笔

  • hust-oj

1404: 1.1.4 Broken Necklace

发表于 2017-10-06   |   分类于 HUSTOJ   |   阅读次数 1,418

题目描述

你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的。这里是 n=29 的二个
例子:
1 2 1 2
r b b r b r r b
r b b b
r r b r
r r w r
b r w w
b b r r
b b b b
b b r b
r r b r
b r r r
b r r r
r r r b
r b r r r w
图片 A 图片 B

r 代表 红色的珠子
b 代表 蓝色的珠子
w 代表 白色的珠子

第一和第二个珠子在图片中已经被作记号。

图片 A 中的项链可以用下面的字符串表示:

brbrrrbbbrrrrrbrrbbrbbbbrrrrb .

假如你要在一些点打破项链,展开成一条直线,然后从一端开始收集同颜色的珠子直到你遇到一个不同的颜色珠子,在
另一端做同样的事(颜色可能与在这之前收集的不同)。确定应该在哪里打破项链来收集到最大多数的数目的珠子。
例如,在图片 A 中的项链中,在珠子 9 和珠子 10 或珠子 24 和珠子 25 之间打断项链可以收集到8个珠子。在一些项
链中还包括白色的珠子(如图片B) 所示。当收集珠子的时候,一个被遇到的白色珠子可以被当做红色也可以被当做蓝色。
表现含有白珠项链的字符串将会包括三个符号 r , b 和 w 。
写一个程序来确定从一条被给出的项链可以收集到的最大珠子数目。

输入

第 1 行: N, 珠子的数目
第 2 行: 一串长度为N的字符串, 每个字符是 r , b 或 w。

输出

单独的一行包含从被供应的项链可以被收集的珠子数目的最大值。

样例输入

29 
wwwbbrwrbrbrrbrbrwrwwrbwrwrrb

样例输出

11 

参考代码

#include<stdio.h>
int main() 
{
    int n,i,j,k,left,right,b[400],max=0,max1=0;
    char a[400];
    scanf("%dn%s",&n,a);
    for (j=0;j<n;j++) 
    {
        for (i=0;i<n;i++) 
        {
            left=0;
            right=1;
            while(i-left>=0&&(a[i-left]==a[i]||a[i-left]=='w'))
                            left++;
            while(i+right<n&&(a[i+right]==a[i+1]||a[i+right]=='w'))
                            right++;
            b[i]=left+right-1;
            if(max<b[i])
                            max=b[i];
        }
        for (k=n;k>0;k--)
                    a[k]=a[k-1];
        a[0]=a[n];
        if(max1<max) 
                    max1=max;
    }
    printf("%dn",max1);
}

解析

暂无

hustoj

发表评论 取消回复

邮箱地址不会被公开。 必填项已用*标注

*
*


hoxis wechat
著作权归作者所有
站点更新说明
  • 文章目录
  • 站点概览
若是凉夜已成梦

若是凉夜已成梦

青春里 总有些事情要努力去做 总有些梦想要拼命去追。

1904 日志
6 分类
12 标签
RSS
weibo github twitter facebook

友情链接

Skip Dreams孤独患者 原站点
© 2017 若是凉夜已成梦
Powered by WordPress | 已运行
Theme By NexT.Mist