1 条题解

  • 0
    @ 2025-8-24 21:41:45

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar CmhDL
    人生就像打电话,不是你先挂,就是我先挂

    搬运于2025-08-24 21:41:45,当前版本为作者最后更新于2019-07-31 22:49:08,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    这是一道很不(e)错(xin)的题目,让我们来看看。


    很明显,此处应要判断项链是否是回文串。我用了一个递归函数来判断回文串:

    int jc(int n){                  //n为搜索右界
    	if((n+1)%2)return n+1;  //如果是奇数直接输出长度
    	if(n==0)return 1;       //如果只剩1个字母直接输出1
    	int l=0,r=n;            //设置左右界
    	while(l<r){
    		if(s[l]!=s[r])
    			return n+1;//输出当前长度
    		++l; --r;       //左界右移,右界左移
    	}
    	return jc(r);           //返回下一段最短长度
    }
    

    这下,main函数里就干净多了:

    string s;
    int main(){
    	cin>>s;
    	printf("%d",jc(s.size()-1));//直接调用
    	return 0;
    }
    

    总代码如下:

    #include <bits/stdc++.h>
    using namespace std;
    string s;
    int jc(int n){
    	if((n+1)%2)return n+1;
    	if(n==0)return 1;
    	int l=0,r=n;
    	while(l<r){
    		if(s[l]!=s[r])
    			return n+1;
    		++l; --r;
    	}
    	return jc(r);
    }
    int main(){
    	cin>>s;
    	printf("%d",jc(s.size()-1));
    	return 0;
    }
    

    唠叨几句:

    1、回文串标程请务必记住!!!

    2、审题请务必仔细!!!

    3、看完题解一定要点赞+评论!!!

    • 1

    信息

    ID
    1862
    时间
    1000ms
    内存
    125MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者