社区讨论

站外题RE89PTS求助

学术版参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lo1xwrfh
此快照首次捕获于
2023/10/23 04:47
2 年前
此快照最后确认于
2023/11/03 05:13
2 年前
查看原帖
题目:
问题 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颗白色,所以项链合格。
我的代码
CPP
#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;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...