1138A. Sushi for Two by 李博浩

A. Sushi for Two
time limit per test1 second
memory limit per test256 megabytes
inputstandard input
outputstandard output
Arkady invited Anna for a dinner to a sushi restaurant. The restaurant is a bit unusual: it offers n pieces of sushi aligned in a row, and a customer has to choose a continuous subsegment of these sushi to buy.

The pieces of sushi are of two types: either with tuna or with eel. Let’s denote the type of the i-th from the left sushi as ti, where ti=1 means it is with tuna, and ti=2 means it is with eel.

Arkady does not like tuna, Anna does not like eel. Arkady wants to choose such a continuous subsegment of sushi that it has equal number of sushi of each type and each half of the subsegment has only sushi of one type. For example, subsegment [2,2,2,1,1,1] is valid, but subsegment [1,2,1,2,1,2] is not, because both halves contain both types of sushi.

Find the length of the longest continuous subsegment of sushi Arkady can buy.

Input
The first line contains a single integer n (2≤n≤100000) — the number of pieces of sushi.

The second line contains n integers t1, t2, …, tn (ti=1, denoting a sushi with tuna or ti=2, denoting a sushi with eel), representing the types of sushi from left to right.

It is guaranteed that there is at least one piece of sushi of each type. Note that it means that there is at least one valid continuous segment.

Output
Print a single integer — the maximum length of a valid continuous segment.

Examples
inputCopy
7
2 2 2 1 1 2 2
outputCopy
4
inputCopy
6
1 2 1 2 1 2
outputCopy
2
inputCopy
9
2 2 1 1 1 2 2 2 2
outputCopy
6
Note
In the first example Arkady can choose the subsegment [2,2,1,1] or the subsegment [1,1,2,2] with length 4.

In the second example there is no way but to choose one of the subsegments [2,1] or [1,2] with length 2.

In the third example Arkady’s best choice is the subsegment [1,1,1,2,2,2].

#include<iostream>
#include<vector>
using namespace std;
int min(int a,int b)
{
	if(a<b)
		return a;
	else
		return b;
}
int main()
{
	int n;
	cin>>n;
	vector<int>a;
	vector<int>b;
	for(int i=0;i<n;i++)
	{
		int temp=0;
		cin>>temp;
		a.push_back(temp);
	}
	int ans=0;
	for(int i=0;i<a.size();i++)
	{
		if(i==0)
		{
			ans=0;
		}
		if(a[i]==a[i-1]&&i)
		{
			ans++;
		}
		else
		{
			b.push_back(ans);
			ans=0;
		}
		if(i==a.size()-1)
		{
			b.push_back(ans);
		}
	}
	int s=-1;
	for(int i=0;i<b.size();i++)
	{
		//cout<<b[i]<<endl;
		//cout<<min(a[i],a[i-1])<<endl;
		if(min(b[i],b[i-1])>s&&i)
			s=min(b[i],b[i-1]);
	}
	//cout<<s<<endl;
	cout<<2*(s+1);
	return 0; 
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值