专栏文章

题解:P14317 「ALFR Round 11」A 浴眼盯真 (dingzhen)

P14317题解参与者 1已保存评论 0

文章操作

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

当前评论
0 条
当前快照
1 份
快照标识符
@min2b7az
此快照首次捕获于
2025/12/01 19:24
3 个月前
此快照最后确认于
2025/12/01 19:24
3 个月前
查看原文

全体目光向我看齐,我这思路完美的不行

首先,1<=n<=2e51<=n<=2e5,难道是二分,线段树,树状数组!!!一看难度,搞错了再来……
由题可得(怎么这么像数学试卷上的偷空减料),若一个字符串满足条件2必定满足条件1,不满足条件1必定不满足条件2(这不废话吗),由此:
1.用数组记录每个字母出现的次数,若26个字母无空缺且字符串首字母或尾字母出现次数大于1则Yes(不包括首或尾字母时不满足条件1,则所有子串必定都无法满足条件1)
2.剩余情况都No,26个字母有空缺条件1,2都不满足,否则只不满足条件2

完美代码如下

CPP
#include<bits/stdc++.h>
#define int long long//好习惯
using namespace std;
int t,l,r,len,cnt,num[30];string s;
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);//关闭同步流(可不加)
	cin>>t;
	while(t--)
	{
		for(int i=0;i<30;i++)
			num[i]=0;
		cnt=0;//多测不清空,爆零两行泪
		cin>>s;len=s.size();
		s=' '+s;//个人习惯
		for(int i=1;i<=len;i++)
		{
			if(num[s[i]-'a']==0)
				cnt++;//统计
			num[s[i]-'a']++;
		}
		if(cnt>=26&&(num[s[1]-'a']>1||num[s[len]-'a']>1))
			cout<<"Yes\n";
		else
		{
			cout<<"No\n";
			if(cnt<26)cout<<"1 2";
			else cout<<"2 ";
			cout<<'\n';//悄悄告诉你,cout<<endl有点慢
		}
	}
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...