传送门
题目大意
将
s
s
s分成两个部分,其中,左边被
a
a
a整除,右边被
b
b
b整除,且不能有前导0
0
≤
s
≤
1
0
1000000
0\leq s\leq 10^{1000000}
0≤s≤101000000,
0
≤
a
,
b
≤
1
0
8
0\leq a,b\leq 10^8
0≤a,b≤108
思路
预处理前缀模和后缀模就好
代码
char s[maxn];
ll a,b;
ll c[maxn],d[maxn];
int main(){
scanf("%s",s+1);
scanf("%lld%lld",&a,&b);
int len=strlen(s+1);
for(int i=1;i<=len;i++){
c[i]=(c[i-1]*10+s[i]-'0')%a;
}
ll tmp=1;
for(int i=len;i>=1;i--){
d[i]=(tmp*(s[i]-'0')+d[i+1])%b;
tmp=tmp*10%b;
}
for(int i=1;i<len;i++){
if(c[i]==0&&s[i+1]!='0'&&d[i+1]==0){
puts("YES");
for(int j=1;j<=i;j++){
printf("%c",s[j]);
}
puts("");
for(int j=i+1;j<=len;j++){
printf("%c",s[j]);
}
return 0;
}
}
puts("NO");
}