40pts求助
查看原帖
40pts求助
169594
Heart_Of_Iron_4楼主2024/7/5 10:22
#include<bits/stdc++.h>
using namespace std;
#define int long long
int k,p,q,r,a[1000100],n1[1000100],n3[1000100];
int qzh[1000100],ten[1000100]={1},t1,ans,t2;
char t;
signed main()
{
	cin>>k>>p>>q>>r;
	for(int i=1;i<=k;++i)
	{
		cin>>t;
		a[i]=t-'0';
	}
	if(a[1]==0&&a[2]==0)
	{
		printf("0");
		return 0;
	}
	for(int i=1;i<=k;++i)
	{
		ten[i]=(ten[i-1]*10)%q;
		qzh[i]=(qzh[i-1]*10+a[i])%q;
	}
	t1=0;
	for(int i=1;i<=k;++i)
	{
		t1=(t1*10+a[i])%p;
	//	printf("%lld\n",t1);
		if(t1==0)n1[++n1[0]]=i;
	}
	t1=0;t2=1;
	for(int i=k;i>=1;--i)
	{
		t1=(t1+a[i]*t2)%r;
		if(t1==0&&(a[k]!=0||i==k))n3[++n3[0]]=i;
		t2=(t2*10)%r;
	}
	for(int i=1;i<=n1[0];++i)
	{
		for(int j=n3[0];j>=1;--j)
		{
			if(n1[i]>=n3[j]-1)
			{
				n3[0]--;
				continue;
			}
			if(n3[j]-n1[i]>2&&a[n1[i]+1]==0)break;
			if((qzh[n3[j]-1]-qzh[n1[i]]*ten[n3[j]-n1[i]-1ll]+q)%q==0)ans++;
		}
	}
	cout<<ans;
	return 0;
}
2024/7/5 10:22
加载中...