#3975. [GESP2409 三级] 回⽂拼接
[GESP2409 三级] 回⽂拼接
回⽂拼接
题目描述
⼀个字符串是回⽂串,当且仅当该字符串从前往后读和从后往前读是⼀样的,例如, 和 都是回⽂串, 但 不是。 ⼩杨有 个仅包含⼩写字母的字符串,他想请你编写程序判断每个字符串是否由两个长度⾄少为 的回⽂串前后拼 接⽽成。
输入格式
第⼀⾏包含⼀个正整数 ,代表字符串数量。 之后 ⾏每⾏⼀个仅包含⼩写字母的字符串。
输出格式
对于每个字符串输出⼀⾏,如果该字符串由两个长度⾄少为 的回⽂串前后拼接⽽成则输出 Yes,否则输出 No。 3.2.4 样例1 1 4 2 abcd 3 aabbb 4 aaac 5 abcdd 1 No 2 Yes 3 No 4 No 对于第 个字符串,都不是由两个长度⾄少为 的回⽂串前后拼接⽽成。 第 个字符串由回⽂串 和 前后拼接⽽成,并且两个回⽂串长度都⾄少为 。 对于全部数据,保证有 ,并且每个字符串的长度不超过 。 3.2.5 参考程序 1 #include<bits/stdc++.h> 2 using namespace std; 3 int main(){ 4 int n,k; 5 cin>>n; 6 for(int i=1;i<=n;i++){ 7 string s; 8 cin>>s; 9 int m = s.length(); 10 int fl = 0; 11 for(int j=2;j<=m-2;j++){ 12 string s1=s.substr(0,j); 13 string s2=s.substr(j,m-j); 14 string t1="",t2=""; 15 for(int k=(int)s1.size()-1;k>=0;k--)t1+=s1[k]; 16 for(int k=(int)s2.size()-1;k>=0;k--)t2+=s2[k]; 17 if(t1s1&&t2s2){ 18 fl=1; 19 break; 20 } 21 } 22 if(fl)cout<<"Yes\n"; 23 else cout<<"No\n"; 24 } 25 26 }
样例输入 #1
1 4
2 abcd
3 aabbb
4 aaac
5 abcdd
1 No
2 Yes
3 No
4 No
对于第 个字符串,都不是由两个长度⾄少为 的回⽂串前后拼接⽽成。
第 个字符串由回⽂串 和 前后拼接⽽成,并且两个回⽂串长度都⾄少为 。
样例输出 #1
数据范围
见题目描述
知识点与难度
本题涉及的知识点从属于 GESP 3级,难度等级:⭐⭐ 。
测试点分布
| Subtask | 分值 | 测试点编号 | 说明 |
|---|---|---|---|
| 0 | 10 | 1~2 | 样例 |
| 1 | 20 | 3~8 | 小规模 / 特殊性质 |
| 2 | 15 | 9~11 | Hack |
| 3 | 30 | 12~20 | 中大规模 |
| 4 | 25 | 21~25 | 随机回归 |
生测试数据后,按实际 subtask 分组改写上表。