站外题RE89PTS求助
  • 板块学术版
  • 楼主CSPJ_AKme
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/8/8 12:56
  • 上次更新2023/11/3 05:13:17
查看原帖
站外题RE89PTS求助
1030814
CSPJ_AKme楼主2023/8/8 12:56

题目:

问题 A: 珍珠项链

时间限制 : 1.000 sec

内存限制 : 128 MB

题目描述

你是一名非常负责且很爱动脑筋的珍珠项链质检工人,受市场需求影响,你所在的珍珠项链生产工厂目前只生产由两种有色珍珠混穿成的爆款珍珠项链。

你的工作内容是检验流水线串珠工人串成环的珍珠项链成品是否符合出厂要求,该厂生产的珍珠项链的出厂标准要求如下:生产出的成品项链上珍珠的颜色分布必须满足一段颜色与另一段颜色交替出现每一条项链上同色的每一段中串珠的数目必须是相同的(以黄白色相间的珍珠项链为例,合格的珍珠项链应是黄色五颗白色五颗黄色五颗白色五颗... ...首尾串联成环,或是黄色一颗白色一颗黄色一颗白色一颗... ...首尾串联成环),聪明的你能想出更高效的合格品筛选方式吗?

注意,只有一种颜色是不行的!

输入

第一行输入一个数字n,表示待检测的项链一共由多少颗珍珠组成。第二行是一个长度为n的01字符串,0表示白色珍珠,1表示黄色珍珠。

输出

如果项链符合要求,输出"YES" 第二行输出一个数字,表示一段同色珍珠的个数,否则输出"NO"。

样例输入

5

00110

样例输出

NO

提示

数据范围:

1<=n<=2e5

另一组样例:

【输入】

6

110001

【输出】

YES

3

【解释】

第二行的一个数字表示每一段相同颜色珍珠的个数。

可以看出来,尾部的1和开头的1连起来有3颗黄色,中间有3颗白色,所以项链合格。

我的代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n;
	cin>>n;
	string s;
	cin>>s;
	if(n%2==1)
	{
		cout<<"NO";
		return 0;
	}
	queue<char> q;
	for(int i=0;i<n;i++)
	{
		q.push(s[i]);
	}
	char lhqing=q.front();
	int niganma=0;
	while(q.front()==lhqing)
	{
		niganma++;
		q.pop();
	}
	for(int i=1;i<=niganma;i++)
	{
		q.push(lhqing);
	}
	int cnt=0;	
	while(q.front()!=lhqing)
	{
		char aaa=q.front();
		q.pop();
		q.push(aaa);
		cnt++;
	}
	if((n/cnt)%2==1)
	{
		cout<<"NO";
		return 0;
	}
	bool tlewa=true;
	char c=q.front();
	for(int i=1;i<=n/cnt;i++)
	{
		for(int j=1;j<=cnt;j++)
		{
			char b=q.front();
			q.pop();
			if(i%2==0)
			{
				if(b==c)
				{
					tlewa=false;
				}
			}
			else
			{
				if(b!=c)
				{
					tlewa=false;
				}
			}
		}
	}
	if(tlewa==false)
	{
		cout<<"NO";
	} 
	else
	{
		cout<<"YES"<<endl<<cnt;
	}
	return 0;
}
2023/8/8 12:56
加载中...