啊,为什么T了啊!
查看原帖
啊,为什么T了啊!
117648
tuzhewen楼主2020/8/11 17:43
#include<bits/stdc++.h>
#define F(i,l,r) for(register int i=l;i<=r;i++)
#define ll long long
#define mem(a,b) memset(a,b,sizeof(a))
#define p_b push_back
#define m_p make_pair
#define il inline
using namespace std;
const int N=2e7+5;
string s1,s2,s3;
int z[N],p[N<<1],fin[N],len1,len2,len3;
ll ans1,ans2;
void get_z(string s,int n,int *z) {
	int L=0,R=0;
	F(i,1,n-1) {
		if(i>R) {
			L=i,R=i;
			while(R<n&&s[R-L]==s[R]) R++;
			z[i]=--R-L+1;
		}
		else {
			int k=i-L;
			if(z[k]<R-i+1) z[i]=z[k];
			else {
				L=i;
				while(R<n&&s[R-L]==s[R]) R++;
				z[i]=--R-L+1;
			}
		}
	}
}
int main() {
	cin>>s1>>s2;
	len1=s1.length();
	len2=s2.length();
	get_z(s2,len2,z);
	z[0]=len2;
	F(i,0,len2-1) ans1^=((i+1)*1ll*(z[i]+1));
	printf("%lld\n",ans1);
	s3=s2+'$'+s1;
	len3=s3.length();
	get_z(s3,len3,p);
	F(i,len2+1,len3-1) ans2^=((i-len2)*1ll*(p[i]+1));
	printf("%lld\n",ans2);
	return 0;
}

是不是string+操作巨慢无比???(大雾)

火车头&O2无果/fad

2020/8/11 17:43
加载中...