1 条题解

  • 0
    @ 2026-7-4 22:47:21

    #include <cstdio>
    #include <cassert>
    #include <iostream>
    using namespace std;
    const int M = 200005;
    int read()
    {
    	int x=0,f=1;char c;
    	while((c=getchar())<'0' || c>'9') {if(c=='-') f=-1;}
    	while(c>='0' && c<='9') {x=(x<<3)+(x<<1)+(c^48);c=getchar();}
    	return x*f;
    }
    int T,nxt[M];string s;
    int get(string x)
    {
    	int n=x.length();
    	for(int i=2,j=0;i<=n;i++)
    	{
    		while(j && x[j]!=x[i-1]) j=nxt[j];
    		if(x[j]==x[i-1]) j++;
    		nxt[i]=j; 
    	}
    	return nxt[n];
    }
    string solve(string x)
    {
    	int t=get(x),n=x.length();
    	string y,r;r.resize(n);
    	if(t==0)
    	{
    		if(n==1) return "0";
    		for(int i=0;i+1<n;i++) r[i]='0';
    		r[n-1]='1';
    		return r;
    	}
    	if(t<(n+1)/2)
    	{
    		for(int i=0;i<t;i++) y+=x[i];
    		string h=solve(y);
    		for(int i=0;i<t;i++)
    			r[i]=r[n-t+i]=h[i];
    		for(int i=t;i<=n-t-1;i++)
    			r[i]='0';
    		if(get(r)!=t) r[n-t-1]='1';
    	}
    	else
    	{
    		t=n-t;
    		for(int i=0;i<t;i++) y+=x[i];
    		for(int i=n-(n%t);i<n;i++) y+=x[i];
    		string h=solve(y);
    		for(int i=0;i<n;i++) r[i]=h[i%t];
    	}
    	return r;
    }
    void work()
    {
    	cin>>s;
    	cout<<solve(s)<<endl;
    }
    signed main()
    {
    	T=read();
    	while(T--) work();
    }
    
    
    • 1

    信息

    ID
    4193
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    2
    已通过
    1
    上传者