马拉车模板求调
  • 板块灌水区
  • 楼主Martlet
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/3/18 19:25
  • 上次更新2023/10/23 21:13:05
查看原帖
马拉车模板求调
543717
Martlet楼主2023/3/18 19:25
#include<bits/stdc++.h>
using namespace std;
const int N = 1000000+10;
string s,tmp;
int d[N*2];
int main(){
    int T,cn = 0;
    cin>>T;
    while(T--){
    	cin>>tmp;
    	cn++;
    	cout<<"Case #"<<cn<<": ";
    	int n = tmp.size();
    	long long cnt = 0;
    	s.resize(n*2+1);
    	for(int i = 0;i < n;i++)s[n*2+1] = tmp[i];
    	n = n*2+1;
    	int l = -1,r = -1;
    	for(int i = 0;i < n;i++){
    	    if(i > r)d[i] = 1;
			else d[i] = min(d[l+r-i],r-i+1);
			while(i-d[i]>= 0&&i+d[i] < n&&s[i-d[i]] == s[i+d[i]])d[i]++;
			if(i+d[i]-1 > r){
				r = i+d[i]-1;
				l = i-d[i]+1;
			}
			cnt += d[i]/2;
		}
		cout<<cnt<<endl;
	}
} 
2023/3/18 19:25
加载中...