AT3637 Concatenated Palindrome 题解
题目传送门
思路
因为拼接后的字符串满足对称,所以这道题其实就是要求 \(i \sim len\) 的字符串是否回文。
本题中字符串 \(S\) 的长度很短,所以可以直接暴力,时间复杂度为 \(O(n^2)\)。
//#include<bits/stdc++.h>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int INF=0x3f3f3f3f,MOD=1e9+7;
#define pu putchar
#define endl puts("")
//#define int __int128
//#define int long long
#define rep(i,l,r) for(int i=l;i<=r;++i)
#define per(i,r,l) for(int i=r;i>=l;--i)
#define me0(a); memset(a,0,sizeof a);
#define me3(a); memset(a,0x3f,sizeof a);
#define PII pair<int,int>
void read(int &n){char c,w=1;for(;48>c||c>57;c=getchar())
w=c==45?-1:1;for(n=0;47<c&&c<58;c=getchar())n=n*10+c-48;n*=w;
}void write(int x){if(x<0)pu(45),x=-x;char c[41],s=0;
for(;x;)c[s++]=x%10,x/=10;if(!s)pu(48);for(;s--;)pu(c[s]+48);
}void debug(int n){printf("\tdebug:\t"); write(n); pu('\t');}
const int MAXN=2e5+10;
int len;
char s[60];
bool check(int x){
rep(i,0,(len-x+1)/2){
if(s[x+i]!=s[len-i]){
return 0;
}
}return 1;
}main(){
for(;;){
char str=getchar();
if(str=='\n'){
break;
}else{
s[++len]=str;
}
}rep(i,1,len){
if(check(i)) {
write(i-1); endl;
return 0;
}
}
}