1 条题解

  • 2
    @ 2021-8-7 21:01:05

    C++ :

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e6+10;
    char str1[N<<1],str2[N<<1];
    int n;
    int get_min(char *s)
    {
    	int i=0,j=1;
    	while(i<n&&j<n)
    	{
    		
    		int k=0;
    		while(s[i+k]==s[j+k]&&k<n)	k++;
    		if(k==n)	break;
    		if(s[i+k]<s[j+k])	j+=k+1;
    		else	i+=k+1;
    		if(i==j)	i++;
    	}
    	return min(i,j);
    }
    int main()
    {
    	cin>>str1>>str2;
    	n=strlen(str1);
    	memcpy(str1+n,str1,n);
    	memcpy(str2+n,str2,n);
    	int s1=get_min(str1);
    	int s2=get_min(str2);
    	str1[s1+n]='\0';
    	str2[s2+n]='\0';
    	if(!strcmp(str1+s1,str2+s2))
    	cout<<"Yes"<<endl<<str1+s1<<endl;
    	else
    	cout<<"No"<<endl;
    	return 0;
    }
    
    • 1

    信息

    ID
    69
    时间
    1000ms
    内存
    128MiB
    难度
    1
    标签
    递交数
    51
    已通过
    46
    上传者