From 197e613574eff6e75ace4b4cae7d8a646e7adce9 Mon Sep 17 00:00:00 2001 From: Zengtudor Date: Wed, 5 Nov 2025 19:02:08 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=AD=97=E7=AC=A6?= =?UTF-8?q?=E4=B8=B2=E5=93=88=E5=B8=8C=E5=A4=84=E7=90=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 实现基于Z算法的字符串哈希处理,用于计算特定模式的出现次数和统计字符出现奇偶性。包含输入处理、Z数组计算和结果统计逻辑。 --- src/11/5/qzhash.cpp | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/11/5/qzhash.cpp diff --git a/src/11/5/qzhash.cpp b/src/11/5/qzhash.cpp new file mode 100644 index 0000000..efe52b4 --- /dev/null +++ b/src/11/5/qzhash.cpp @@ -0,0 +1,43 @@ +#include +using namespace std; +typedef long long ll; +int T,n,Z[2001000],cnt1[30],cnt2[30],sum[30],CN,BN,nown,sumn,nown2; +ll res; +char s[2001000]; +int main(){ +// freopen("string.in","r",stdin); +// freopen("string.out","w",stdout); + scanf("%d",&T); + while(T--){ + scanf("%s",s),n=strlen(s),memset(sum,0,sizeof(sum)),memset(cnt1,0,sizeof(cnt1)),memset(cnt2,0,sizeof(cnt2)),res=CN=BN=0; + for(int i=0;iRpos)Centre=i,Rpos=i+Z[i]-1; + } +// for(int i=1;i>1,N2=(tot)>>1; +// printf("%d:%d %d\n",tot,N1,N2); + res+=1ll*sumn*N1; + if(cnt2[s[i-1]-'a'])nown2--; + else nown2++; + cnt2[s[i-1]-'a']^=1; + sum[nown2]++; + if(nown2<=nown)sumn++; + res+=1ll*BN*N2; + if(nown2<=CN)BN++; + } + printf("%lld\n",res); + } + return 0; +}