国产探花免费观看_亚洲丰满少妇自慰呻吟_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);}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鄄城县| 沂水县| 府谷县| 东台市| 宝丰县| 昌都县| 星子县| 铁岭市| 连南| 右玉县| 新河县| 崇义县| 兴业县| 永登县| 伽师县| 延川县| 科技| 霍邱县| 晋州市| 克拉玛依市| 城步| 栾城县| 宣城市| 柳江县| 沅江市| 浦东新区| 涿州市| 抚州市| 北流市| 晋江市| 正镶白旗| 丰顺县| 沙湾县| 尚义县| 涿州市| 和静县| 鹤岗市| 广安市| 辽中县| 察雅县| 久治县|