专栏文章
题解 CF2039B
CF2039B题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @miqwaced
- 此快照首次捕获于
- 2025/12/04 11:47 3 个月前
- 此快照最后确认于
- 2025/12/04 11:47 3 个月前
题意:
给定一个字符串,问其是否包含一个非空子串,使该子串本质不同的非空子串数量是偶数。
思路:
发现如果字符串很长,本质非空子串的数量不好处理。不妨直接从最短的一些子串考虑,手搓一些性质。
- 子串长度为 :本质不同的子串个数必然为 ,不符合;
- 子串长度为 :如果两个字符相同(如
aa),本质不同子串个数是 ,符合条件;如果两个字符不同(如ab),本质不同的子串个数是 ,不符合; - 子串长度为 :如果存在两个相邻相同的字符,则必然符合 中的情况,符合条件。于是我们只剩下
aba、abc的两种情况。前者不符合条件,后者符合;
由上述情况继续推算,不难发现,只有原字串是类似
abababababab 这样 ab 交替的字符串,才不存在符合条件的子串,输出 -1,其它字符串都一定存在子串符合条件。程序如下:
CPP#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int N=1e5+5;
int T;
char ch[N];
int main(){
scanf("%d",&T);
while(T--){
scanf("%s",ch+1);
int n=strlen(ch+1);
bool flag=false;
for(int i=1;i<n;i++){
if(ch[i]==ch[i+1]){
printf("%c%c\n",ch[i],ch[i+1]);
flag=true;
break;
}
if(ch[i]!=ch[i+1]&&ch[i+1]!=ch[i+2]&&ch[i]!=ch[i+2]&&i+2<=n){
printf("%c%c%c\n",ch[i],ch[i+1],ch[i+2]);
flag=true;
break;
}
}
if(!flag)printf("-1\n");
}
return 0;
}
THE END
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...