8.字符串

字符串

开题顺序: \(HADBEMK\)

\(A\) luogu P3501 [POI2010]ANT-Antisymmetry

\(B\) luogu P4555 [国家集训队]最长双回文串

\(C\) luogu P6114 【模板】Lyndon 分解

\(D\) BZOJ2176 Strange string

  • 最小表示法板子。

  • 因为字符值域 \(\in [33,254]\) ,所以需要 unsigned char 代替 char

    点击查看代码
    unsigned char s[20000010];
    int main()
    {
    	int n,i,l,r,len;
    	cin>>n;
    	for(i=1;i<=n;i++)
    	{
    		cin>>s[i];
    		s[n+i]=s[i];
    	}
    	l=1;
    	r=2;
    	while(l<=n&&r<=n)
    	{
    		len=0;
    		while(len<=n-1&&s[l+len]==s[r+len])
    		{
    			len++;
    		}
    		if(len==n)
    		{
    			break;
    		}
    		else
    		{
    			if(s[l+len]>s[r+len])
    			{
    				l+=len+1;
    				l+=(l==r);
    			}
    			else
    			{
    				r+=len+1;
    				r+=(l==r);
    			}
    		}
    	}
    	for(i=min(l,r);i<=n;i++)
    	{
    		cout<<s[i];
    	}
    	for(i=1;i<=min(l,r)-1;i++)
    	{
    		cout<<s[i];
    	}
    	return 0;
    }
    

\(E\) CF471D MUH and Cube Walls

\(F\) CF494B Obsessive String

\(G\) CF432D Prefixes and Suffixes

  • 第一问显然是 LibreOJ 10036. 「一本通 2.1 练习 2」Seek the Name, Seek the Fame ,直接反着跳 \(next\) 即可。

  • \(f_{i}\)\([1,i]\) 在原串中的出现次数,则有 \(\begin{cases} f_{i} \gets f_{i}+1 \\ f_{nxt_{i}} \gets f_{nxt_{i}}+f_{i} \end{cases}\) ,初始时 \(f_{1 \sim n}=0\)

    点击查看代码
    int nxt[100010],f[100010];
    char s[100010];
    vector<int>ans;
    int main()
    {
    // #define Issac
    #ifdef Issac
    	freopen("in.in","r",stdin);
    	freopen("out.out","w",stdout);
    #endif
    	int n,i,j;
    	scanf("%s",s+1);
    	n=strlen(s+1);
    	for(i=2,nxt[1]=j=0;i<=n;i++)
    	{
    		while(j>=1&&s[i]!=s[j+1])
    		{
    			j=nxt[j];
    		}
    		j+=(s[i]==s[j+1]);
    		nxt[i]=j;	
    	}
    	for(i=n;i>=1;i--)
    	{
    		f[i]+=1;
    		f[nxt[i]]+=f[i];
    	}
    	for(i=n;i>=1;i=nxt[i])
    	{
    		ans.push_back(i);
    	}
    	reverse(ans.begin(),ans.end());
    	cout<<ans.size()<<endl;
    	for(i=0;i<ans.size();i++)
    	{
    		cout<<ans[i]<<" "<<f[ans[i]]<<endl;
    	}
    	return 0;
    }
    

\(H\) luogu P2375 [NOI2014] 动物园

\(I\) CF965E Short Code

\(J\) CF1616H Keep XOR Low

\(K\) CF558E A Simple Task

\(L\) luogu P9717 [EC Final 2022] Binary String

\(M\) luogu P3311 [SDOI2014] 数数

posted @ 2024-11-04 10:32  hzoi_Shadow  阅读(30)  评论(0编辑  收藏  举报
扩大
缩小