Codeforces 1744C. Traffic Light题解

Problem - 1744C - Codeforces

题意:

        大概意思就是说,要求在某时刻下红绿灯状态为c,要找一个能确定通过该红绿灯的时间

题解:

        根据红绿灯会出现循环的现象,我们可以将红绿灯字符串s重复两次(避免漏掉前面和后面连续的情况),然后找与下一个绿灯之间的区间的最大值

        也就是说,枚举每一个状态为c的点,找到与下一个绿灯之间的区间的最大值即为该题的解

代码如下:
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
void sl()
{
	int n,ans = 0;
	char ch,op;
	string str;
	cin >> n >> ch;
	cin >> str;
	str = str + str; // 将红绿灯字符串重复两次,以免漏掉前面和后面连续的情况
	for (int i = 0; i < str.size(); ++i)
	{
		if (str[i] == ch)
		{
			int sum = 0;
			while(str[i] != 'g' && i < str.size()) // 找与下一个路灯之间的区间的最大值
			{
				sum++; // 用sum来记录长度
				i++;
			}
			ans = max(ans,sum);  // 找出最大值,这样就能确保一定能通过该红绿灯
		}
	}
	cout << ans << endl;
}
signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	
	int T;
	cin >> T;
	while(T--) sl();
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值