赞
踩
你发现自己在一个不寻常的十字路口,有一个奇怪的红绿灯。红绿灯有三种可能的颜色:红(
r
r
r),黄(
y
y
y),绿(
g
g
g)。众所周知,红绿灯每
n
n
n秒重复一次颜色,在第
i
i
i秒时,颜色
s
i
s_i
si是亮的。
这样,颜色的顺序就由一个字符串来描述。例如,如果
s="rggry"
\text{s="rggry"}
s="rggry",那么交通灯的工作方式如下:红-绿-绿-红-黄-红-绿-绿-红-黄-… 等等。
更正式地说,你得到一个长度为
n
n
n的字符串
s
1
,
s
2
,
…
,
s
n
s_1,s_2,…,s_n
s1,s2,…,sn。在第一秒,颜色
s
1
s_1
s1是亮的,在第二秒,颜色
s
2
s_2
s2,…在第
n
n
n秒时,颜色
s
n
s_n
sn亮起,在第
n
+
1
n+1
n+1秒时,颜色
s
1
s_1
s1亮起,以此类推。
你需要过马路,只有绿灯亮着的时候才能过马路。
你知道现在的红绿灯是什么颜色,但你不知道现在的时间。你需要找出保证过马路的最短时间。
你可以假设你马上过了马路。
例如,
s="rggry"
\text{s="rggry"}
s="rggry"和当前红绿灯颜色
r
r
r有两个选项:绿色在
1
1
1秒后或
3
3
3秒后亮起。这样的话,答案就等于
3
3
3,这是保证我们过马路的秒数,如果当前的颜色是
r
r
r。
第一行包含整数
n
n
n和符号
c
c
c(
c
c
c为允许的红绿灯颜色
r
r
r、
y
y
y或
g
g
g中的一种)——字符串
s
s
s的长度和当前红绿灯的颜色。
第二行包含长度为
n
n
n的字符串
s
s
s,由字母
r
r
r、
y
y
y和
g
g
g组成
输出保证您过马路的最小秒数。
输入数据 1
5 r
rggry
输出数据 1
3
输入数据 2
9 y
rrrgyyygy
输出数据 2
4
对于
50
%
50\%
50%的数据,
1
≤
n
≤
1
0
3
1\leq n \leq 10^3
1≤n≤103
对于
100
%
100\%
100%的数据,
1
≤
n
≤
2
∗
1
0
5
1\leq n \leq 2*10^5
1≤n≤2∗105
#include <bits/stdc++.h> #define ll long long using namespace std; int t; const int N=2e5+5; int n; char y; string s; int a[N*2],cnt; void solve() { cin>>n>>y>>s; s+=s; cnt=0; int mx=0; for(int i=0;i<s.size();i++){ if(s[i]=='g') a[++cnt]=i; } for(int i=0;i<s.size()/2;i++){ if(s[i]==y){ int k=lower_bound(a+1,a+cnt+1,i)-a; mx=max(a[k]-i,mx); } } cout<<mx<<"\n"; } int main() { ios::sync_with_stdio(false); cin.tie(0); t=1; solve(); return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。