25/14/2求调(哈希二分)
查看原帖
25/14/2求调(哈希二分)
766454
hiYE_ame楼主2025/8/2 00:15
#include<iostream>
#include<cstring>
using namespace std;
bool antisym(string s){
    if(s.length()%2) return 0;
    int l=s.length()/2;
    for(int i=0;i<l;i++){
        if(s[i]==s[2*l-1-i]) return 0;
    }
    return 1;
}
int main(){
    int n;
    cin>>n;
    string s;
    cin>>s;
    int cnt=0;
    for(int i=0;i<=n-2;i++){
        int l=1,r=min(i+1,n-i-1);
        int m=(l+r)/2;
        while(l<=r){
        	if(l==r){
        		if(antisym(s.substr(i-m+1,2*m))) cnt+=m;
				else if(antisym(s.substr(i-m+2,2*(m-1)))) cnt+=m-1;
				else m=0;
				break;
			}
            else if(antisym(s.substr(i-m+1,2*m))){
				l=m+1;
            }
            else{
                r=m-1;
            }
            m=(l+r)/2;
        }
    }
    cout<<cnt;
    return 0;
}
2025/8/2 00:15
加载中...