1 条题解

  • 0
    @ 2026-8-9 11:20:57
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    int p[30000100];
    int main(){
    	ios::sync_with_stdio(0);
    	cin.tie(0);
    	string ns;
    	cin>>ns;
    	string s=" ";
    	for(int i=0;i<ns.size();i++){
    		s+=ns[i];
    		if(i<ns.size()-1)s+='|';
    	}
    	int n=s.size()-1;
    	int mid=0,r=0,ans=0;
    	for(int i=1;i<=n;i++){
    		if(i<=r)p[i]=min(p[mid*2-i],r-i+1);
    		while(s[i-p[i]]==s[i+p[i]])p[i]++;
    		if(i+p[i]-1>=r){
    			mid=i;r=i+p[i]-1;
    		}
    		cout<<((p[i]-(i&1))/2*2+(i&1))<<" ";
    	}
    	return 0;
    }
    
    • 1

    统计回文 (Enumerate Palindromes)

    信息

    ID
    3272
    时间
    100ms
    内存
    1024MiB
    难度
    10
    标签
    递交数
    5
    已通过
    5
    上传者