RE求助
查看原帖
RE求助
365338
sogk楼主2021/8/23 23:56

经测试很可能是init函数中的输入出错了
请忽略丑陋的宏定义于命名空间

#include <bits/stdc++.h>
#define AK 1
#define Public signed
#define Class main
#define int long long
#define Max(a,b) (a>b?a:b)
#define Min(a,b) (a<b?a:b)
#define MAX(a,b,c) (Max(a,Max(b,c)))
#define MIN(a,b,c) (Min(a,Min(b,c)))
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
#define bulit(x) for(int i=head[x];i;i=edge[i].nxt)
#define mp(x,y) make_pair(x,y)
#define que std::priority_queue
#define ret register
#define inl inline
#define nsp namespace
#define whl while
#define MAXN(x) std::memset(x,0x3f,sizeof(x))
#define MINN(x) std::memset(x,-(0x3f),sizeof(x))
#define ender return 0
#define beginer signed main()
#define Clear(x) std::memset(x,0,sizeof(x))
#define C_STL(x) for(;!x.empty();)x.pop();
#define ULL unsigned long long

nsp FastIOstream{
	inl void read(int &x){//Fast read
		x=0;
        int f=1;
        char c=getchar();
		for(;!isdigit(c);){
            if(c=='-')f=-1;c=getchar();
        }
		for(;isdigit(c);){
            x=(x<<1)+(x<<3)+c-48;
            c=getchar();
        }
		x*=f;
        return;
	}
	void print(int x){//Fast print
		if(x<0){
            x=-x;
            putchar('-');
        }
        if(x>9){
            print((x>>1)/5);
        }
		putchar(x%10+48);
        return;
	}
}

nsp Algorithm{
    using std::max;
	inl int fast_power(int base,int exp){
		int res=1;
		for(;exp;){
            if(exp&1){
                res*=base;
            }
            base*=base;
            exp>>=1;
        }
		return res;
	}
	int GCD(int x,int y){
        return y?x:GCD(y,x%y);
    }
}

using FastIOstream::read;
using FastIOstream::print;
using namespace std;

char s[55000005];
int p[55000000],mid,r,ans=-(1<<30),cnt=0;

void init(){
	s[0]='$';
	s[1]='#';
	cnt=1;
	char c=getchar();
	while(c>='a'&&c<='z'){
		s[++cnt]=c;
		s[++cnt]='#';
		c=getchar();		
	}
}

beginer{
	init();
	rep(i,1,cnt){
		if(r>=i){
			p[i]=min(p[mid<<1-i],r-i+1);
		}
		while(s[i-p[i]]==s[i+p[i]]){
			++p[i];
		}
		if(i+p[i]>r){
			mid=i;
			r=i+p[i]-1;
		}
		ans=max(ans,p[i]);
	}
	print(ans-1);
	putchar('\n');
	ender;
}
2021/8/23 23:56
加载中...