1 条题解

  • 0
    @ 2025-8-24 22:14:47

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar CandyCandyFruit
    大家珂以叫我CCF(

    搬运于2025-08-24 22:14:47,当前版本为作者最后更新于2019-12-21 20:34:43,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    第一眼看到题目时,我内心欣喜万分:太好了,终于有一道水题可刷了!于是我就开开心心地提交了求这个字符串里出现不同字母的个数的代码(样例过的了)。

    结果...1010分(代码就不贴了,防止你们说我傻)。

    我便开始重新看题目:

    我在这篇文章里暂且称“ABCABC”那样有两个(或以上)完全相等的东西为“小字符串”。可以得出,当小字符串长度=3=3时,k=4k=4。所以我们就要求出最长的小字符串的长度,并且加一后输出。

    ACAC代码:

    #include<bits/stdc++.h>
    using namespace std;
    int n,s,m;
    char a[250];
    void c(int i,int j)
    {
    	if(a[i]==a[j])//判断这两个字母是否相同 (如果相同,小字符串的位数+1) 
    	{
    		s++;
    		c(i+1,j+1);//接着看下一个字母是否相同 
    	}
    	
    }
    int main()
    {
    	scanf("%d",&n);
    	for(int z=1;z<=n;z++)
    	cin>>a[z];
    	for(int w=1;w<=n;w++)//二重循环,数据够小,不怕超时 
    	{
    		for(int b=w+1;b<=n;b++)// 注意这里b要等于w+1,不然会一直相等(就会等同于“w=w”) 
    		{
    			s=0;//统计当前的相同的小字符串里所包含的字母数 
    			c(w,b);//自定义函数寻找最长的两个小字符串 
    			if(s>m) m=s;//如果这个小字符串里字母的数量超过最大值,最大值更新 
    		}
    	}
    	printf("%d",m+1);//因为最大的相等的小字符串有两个(及以上),所以需要加一。 
    	return 0;
    }
    

    顺便安利一下我的bolg

    • 1

    信息

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