Section 1.1 beads

这道题要计算将项链切断,然后从两端收集的相同的颜色的珠子数,两端的颜色可以不同,但是

同一端的必须一样。我先讲字符串复制了一遍加到原来的字符串后面,然后把两个同样的项链放

在一块,从头开始用两个变量(变量)a,b记录自左方某点至目前为止可搜集到之两种颜色珠子数,

取途中所出现a+b之最大值,遇颜色变换时再将b指定给a即可,w也可以直接计数。

/*
ID:yucept21
LANG:C++
TASK:beads
*/

#include<cstdio>
#include<cstring>
#include<cstdlib>

int main()
{

freopen( "beads.in", "r", stdin);
freopen( "beads.out", "w", stdout);

char s[750], c = 0;
int N;
scanf( "%d", &N);
scanf( "%s", s);
for( int i = N; i < 2 * N; i ++)
{
s[i] = s[i - N];
}
int a = 0, b = 0, w = 0, max = 0;
for( int i = 0; i < N << 1; i ++)
{
if( s[i] == 'w') b ++, w ++; // w是白色珠子的个数
else if( s[i] == c) b ++, w = 0; //b是当前颜色加上白色珠子的个数
else {
if( a + b > max)
max = a + b;
a = b - w; //另一种颜色的个数
b = w + 1; // 变换颜色,重新计数
w = 0;
c = s[i];
}
}
if( a + b > max) max = a + b;
if( max > N) max = N;
printf( "%d\n", max);
return 0;
}

 

转载于:https://www.cnblogs.com/Yu2012/archive/2012/01/14/2322396.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值