1 条题解

  • 0
    @ 2025-8-24 22:15:10

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Clown
    AFOed

    搬运于2025-08-24 22:15:10,当前版本为作者最后更新于2020-02-20 14:17:37,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    进入正题前,先重磅推荐乱码团队以及我的博客

    当然,还要提醒大家,不能抄代码,请详细阅读洛谷社区规则

    本蒟蒻衷心希望管理员给个通过^_^

    那么,闲言少叙,现在切入正题吧(我想我的方法不太复杂)!

    这道题要用到一个ABOUT字符串的函数:

    SUBSTR

    这是什么?我们来举个例子:

    假设s是一个字符串,s="YOUAREABIGPIG.",我想提取它从下表为0到下表为2的这一段,令他为t。

    那么怎样做呢?这就要用到substr了。

    表示方法为:t=s.substr(0,3);

    如果用广泛的角度来讲,就是:

    子串=原串.substr(起始位置,提取的子串的长度);

    对于各位巨(蒟)佬(蒻)来说,一定很容易理解吧!

    然后,我们对每一个串暴力枚举长度,如果当前长度不可行,就判断再长一点的长度。

    怎样判断可不可行呢?挨个枚举其它字符串,看看前缀会不会重复,问题迎刃而解了!

    其它注释见代码,那么现在,上代码!

    #include<bits/stdc++.h>
    using namespace std;
    string s[51];
    int len[51];
    int main()
    {
    	int n;
    	cin>>n;
    	int i,j,k;
    	for(i=1;i<=n;i++)
    	{
    		cin>>s[i];
    		len[i]=s[i].size();
    	}
       	//前面是输入,自然不必多说,如果无法理解,请回吧^_^
    	for(i=1;i<=n;i++)
    	{
    		for(j=1;j<=len[i];j++)
    		{
    			bool flag=true;
    			for(k=1;k<=n;k++)
    			{
    				if(i==k)
    				{
    					continue;
    				}
               			//如果是同一个串,自然不必判。
    				if(s[i].substr(0,j)==s[k].substr(0,j))
    				{
    					flag=false;
    				}
               			//判断前缀是否相同,相同的话,这个长度就不成立了。
    			}
    			if(flag)
    			{
    				cout<<s[i].substr(0,j)<<endl;
    				break;
    			}
    		}
    	}
    	return 0;
    }
    

    点个赞再走吧!

    • 1

    信息

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