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;
		}
	}
}

\(AC\) 记录


完结撒花 \(\sim\sim\sim\)

posted @ 2023-07-01 11:05  liukejie  阅读(2)  评论(0编辑  收藏  举报