国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

[bzoj4277]Ciecie

2019-11-08 20:21:31
字體:
來源:轉載
供稿:網友

題目描述

給定一個長度為k的數字串N以及三個質數p,q,r,請你將N劃分為三段非空字符串,使得第一段能被p整除,第二段能被q整除,第三段能被r整除,且每一段都不含前導0。 注意:單獨的0是允許的。 2015<=p,q,r

瞎做

我們可以很容易通過前綴和后綴和處理判斷一個前綴或后綴是不是p或r的倍數。 這個q的倍數呢? 假如[i,j]是q的倍數。 q|∑jk=ia[k]?10j?k q|10j?∑jk=ia[k]?(10′)k 注意q>=2015且是質數,所以10^j可略去。 后面sigma式子只與k有關,因此可以處理那個東西的前綴和。 [i,j]是q的倍數,被轉化為 q|sum[j]?sum[i?1] sum[i?1]≡sum[j](mod q) 然后就很容易做了,開個桶統計sum模q的合法后綴有多少個,瞎掃一波。 注意不能含有前導0但是一個0是允許的。

#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(i=a;i>=b;i--) using namespace std;typedef long long ll;const int maxn=1000000+10,maxq=100000+10;int mi[maxn],PRe[maxn],suf[maxn],sum[maxn],b[maxq],a[maxn];int i,j,k,l,t,n,m,p,q,r,mo;ll ans;int quicksortmi(int x,int y){ if (!y) return 1; int t=quicksortmi(x,y/2); t=(ll)t*t%mo; if (y%2) t=(ll)t*x%mo; return t;}int get(){ char ch=getchar(); while (ch<'0'||ch>'9') ch=getchar(); return ch-'0';}bool pd(int i){ if (i>1&&!a[1]) return 0; return (pre[i]==0);}bool dp(int i){ if (i<n&&!a[i]) return 0; return (suf[i]==0);}int main(){ scanf("%d%d%d%d",&n,&p,&q,&r); fo(i,1,n) a[i]=get(); mo=p; pre[0]=0; fo(i,1,n) pre[i]=((ll)pre[i-1]*10%mo+a[i])%mo; mo=q; t=quicksortmi(10,mo-2); l=1; fo(i,1,n){ l=(ll)l*t%mo; sum[i]=(sum[i-1]+(ll)a[i]*l%mo)%mo; } mo=r; suf[n+1]=0; l=1; fd(i,n,1){ suf[i]=(suf[i+1]+(ll)a[i]*l%mo)%mo; l=(ll)l*10%mo; } fd(i,n,1){ if (i>1&&i<n){ if (!a[i]&&pd(i-1)&&dp(i+1)) ans++; else if (a[i]&&pd(i-1)) ans+=b[sum[i-1]]; } if (i==n&&!a[i]) b[sum[i-1]]++; else if (a[i]&&dp(i)) b[sum[i-1]]++; } printf("%lld/n",ans);}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 蕉岭县| 阿图什市| 新巴尔虎右旗| 徐州市| 两当县| 通海县| 靖远县| 合水县| 广丰县| 元谋县| 交城县| 平度市| 郸城县| 宜昌市| 根河市| 浮山县| 兰坪| 噶尔县| 海口市| 读书| 渝北区| 鸡西市| 临漳县| 宣恩县| 玉屏| 金寨县| 印江| 洮南市| 岐山县| 图木舒克市| 隆回县| 青海省| 巴林左旗| 三亚市| 阳信县| 汨罗市| 卓尼县| 七台河市| 巩留县| 沈阳市| 新沂市|