题意

给你t个区间,让你求这个区间之间中不满足这三个条件之一的数的平方和。
1. S是a的倍数。
2. S在十进制表示下的各项数字加起来是a的倍数。
3. S的某一位是a

数据范围

对于15%的数据,0<=L<=R<=106,T=10
对于35%的数据,0<=L<=R<=107,T=10
另外有25%的数据,A=2,L=10k,R=10v,A = 2,L = 10^k,R = 10^v,k和v都是自然数。
对于100%的数据,0<=L<=R<=1018,2<=A<=9,T<=1000

分析

一看就明显的数位dp数位dp,考试后还是第一次听说这个东东,所以就恶补了一下数位dpdp。。
首先按照惯例,我们要设一个f[i,same,mo,sum]f[i,same,mo,sum]表示枚举到第i位数(从高到低),前面i位是否与右边界相同(为了方便统计答案),前面i位组成的数对aa取模的数,前面i位各个位加起来的和对aa取模的数,的方案。那么有了这个通常还要再设一个g[i,same,mo,sum]g[i,same,mo,sum]为这些数的和(为了方便统计后面的平方和),最后就是s[i,same,mo,sum]s[i,same,mo,sum]表示为这些数的平方和。

转移方程

转移很简单,我们先讨论f的转移:枚举第i+1位的数是多少ch,那么转移到第i+1位就是
f[i+1,sameand(bit[i+1]=ch),(mo∗10+ch)modA,(sum+ch)modA]+=f[i,same,mo,sum](ch<>a,当same=1,ch<=bit[i+1])f[i+1,same and (bit[i+1]=ch),(mo*10+ch)mod A,(sum+ch)mod A]+=f[i,same,mo,sum](cha,当same=1,ch
g的转移也是类似的:
g[i+1,sameand(bit[i+1]=ch),(mo∗10+ch)modA,(sum+ch)modA]+=g[i,same,mo,sum]∗10+ch∗f[i,same,mo,sum](ch<>a,当same=1,ch<=bit[i+1])g[i+1,same and (bit[i+1]=ch),(mo*10+ch)mod A,(sum+ch)mod A]+=g[i,same,mo,sum]*10+ch*f[i,same,mo,sum](cha,当same=1,ch
s的转移麻烦一点:

我们可以这样理解:(设aiai表示当前的满足条件的数,现在要加上ch)
(a1∗10+ch)2+(a2∗10+ch)2+(a3∗10+ch)2......(a1*10+ch)^2+(a2*10+ch)^2+(a3*10+ch)^2......
(a12∗100+ch2+20∗ch∗a1)+(a22∗100+ch2+20∗ch∗a2)+(a32∗100+ch2+20∗ch∗a3)......(a1^2*100+ch^2+20*ch*a1)+(a2^2*100+ch^2+20*ch*a2)+(a3^2*100+ch^2+20*ch*a3)......
合并a1+a2+a3...a1+a2+a3...->g[i,same,mo,sum]g[i,same,mo,sum]
合并a12+a22+a32....a1^2+a2^2+a3^2....->s[i,same,mo,sum]s[i,same,mo,sum]
合并ch2+ch2+ch2.....ch^2+ch^2+ch^2.....->f[i,same,mo,sum]∗ch2f[i,same,mo,sum]*ch^2
那么这样原式变成s[i,same,mo,sum]∗100+f[i,same,mo,sum]∗ch2+g[i,same,mo,sum]∗ch∗20s[i,same,mo,sum]*100+f[i,same,mo,sum]*ch^2+g[i,same,mo,sum]*ch*20
所以转移方程为:
s[i+1,sameand(bit[i+1]=ch),(mo∗10+ch)modA,(sum+ch)modA]+=s[i,same,mo,sum]∗100+f[i,same,mo,sum]∗ch2+g[i,same,mo,sum]∗ch∗20(ch<>a,当same=1,ch<=bit[i+1])s[i+1,same and (bit[i+1]=ch),(mo*10+ch)mod A,(sum+ch) modA]+=s[i,same,mo,sum]*100+f[i,same,mo,sum]*ch^2+g[i,same,mo,sum]*ch*20(cha,当same=1,ch
最后再统计mo<>0,sum<>0mo0,sum0的s即可
时间复杂度:O(T∗logR∗2∗103)O(T ∗ logR ∗ 2 ∗ 10^3)
这样便可以很好的解决问题了。

代码:(我是顺推的,所以初始化有点猥琐。。)

const m=1000000007;
varg,f,s:array[0..20,0..1,0..9,0..9] of int64;i,t,a:longint;l,r:int64;
procedure vare(var x:int64);begin if x=-1 then x:=0;end;
procedure sets(var x:longint;y:longint);
begin x:=(x+y)mod m;end;
procedure sets(i,p,mo,sum,i1,p1,mo1,sum1,k:longint);
beginvare(f[i,p,mo,sum]);vare(g[i,p,mo,sum]);vare(s[i,p,mo,sum]);f[i,p,mo,sum]:=(f[i,p,mo,sum]+f[i1,p1,mo1,sum1])mod m;g[i,p,mo,sum]:=(100*g[i1,p1,mo1,sum1]+20*k*s[i1,p1,mo1,sum1]+k*k*f[i1,p1,mo1,sum1]+g[i,p,mo,sum])mod m;s[i,p,mo,sum]:=(s[i1,p1,mo1,sum1]*10+k*f[i1,p1,mo1,sum1]+s[i,p,mo,sum])mod m;
end;
function solve(x,y:int64):int64;
var i,j,mo,sum,ch,t,o,p:longint;bit,ti:array[0..100] of integer;ans:int64;
beginif x=0 then exit(0);fillchar(f,sizeof(f),255);fillchar(g,sizeof(g),255);fillchar(s,sizeof(s),255);o:=0;while x<>0 do begininc(o);bit[o]:=x mod 10;x:=x div 10;end;for i:=1 to o do ti[i]:=bit[o-i+1];bit:=ti;for i:=0 to bit[1] do if y<>i then beginif i=bit[1] then t:=1 else t:=0;vare(g[1,t,i mod y,i mod y]);vare(f[1,t,i mod y,i mod y]);vare(s[1,t,i mod y,i mod y]);inc(g[1,t,i mod y,i mod y],i*i);inc(f[1,t,i mod y,i mod y],1);inc(s[1,t,i mod y,i mod y],i);end;for i:=1 to o-1 dofor p:=0 to 1 dofor ch:=0 to 9 do if (p=1)and(bit[i+1]<ch) then breakelse beginif ch=y then continue;for mo:=0 to y dofor sum:=0 to y do beginif f[i,p,mo,sum]=-1 then continue;if (p=1)and(ch=bit[i+1]) then t:=1 else t:=0;if ch=5 theno:=o;sets(i+1,t,(mo*10+ch)mod y,(sum+ch)mod y,i,p,mo,sum,ch);end;end;ans:=0;for p:=0 to 1 dofor mo:=0 to y dofor sum:=0 to y doif (g[o,p,mo,sum]<>-1)and(sum<>0)and(mo<>0) thenans:=(ans+g[o,p,mo,sum])mod m;exit(ans);
end;
beginreadln(t);for t:=1 to t do beginreadln(l,r,a);writeln((solve(r,a)-solve(l-1,a)+m)mod m);end;
end.

【五校联考5day2】光棍相关推荐

  1. JZOJ 4238. 【五校联考5day2】纪念碑

    Description 2034年,纪念中学决定修建校庆100周年纪念碑,作为杰出校友的你被找了过来,帮校方确定纪念碑的选址. 纪念中学的土地可以看作是一个长为n,宽为m的矩形.它由n* m个1*1的 ...

  2. jzoj4240 [五校联考5day2]游行 拓扑排序+倍增lca+线段树优化建图

    Description 恶梦是学校里面的学生会主席.他今天非常的兴奋,因为学校一年一度的学生节开始啦!! 在这次节日上总共有N个节目,并且总共也有N个舞台供大家表演.其中第i个节目的表演时间为第i个单 ...

  3. jzoj 4240.【五校联考5day2】游行 主席树优化连边+支配树

    Description 恶梦是学校里面的学生会主席.他今天非常的兴奋,因为学校一年一度的学生节开始啦!! 在这次节日上总共有N个节目,并且总共也有N个舞台供大家表演.其中第i个节目的表演时间为第i个单 ...

  4. 湖南长郡2021高考成绩查询时间,2021年湖南新高考六校、长郡十五校联考时间公布...

    2021年湖南新高考六校.长郡十五校联考时间公布 导读:距离2021年高考时间仅剩不到一百天,各个省份都的高三学子都进入紧张阶段.开始了各种模拟考试.2021届湖南省炎德英才大联考的考试时间也已经公布 ...

  5. 4246. 【五校联考6day2】san (Standard IO)

    4246. [五校联考6day2]san (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Detailed Limits D ...

  6. jzoj4230. 【五校联考4day1】淬炼神体(B组——Day3)

    jzoj4230. [五校联考4day1]淬炼神体 题目 Description 王仙女将你提供的答案填在<葵花宝典>上,突然,宝典发出耀眼的白光,一股强大的吸力瞬间将仙女吸入宝典中. 一 ...

  7. 【五校联考7day1】n染色

    Description WYF画了一个极为不规则的n边形,画面太美简直不看,没有任意两条边长度是相等的.因为形状太难看了,做他同桌的CWQ看不下去了,趁着WYF上厕所的时间准备用他书包里的m种颜色的彩 ...

  8. 【五校联考7day2】QYQ的图

    Description 给你一个n个点,m条边的无向图,每个点有一个非负的权值ci,现在你需要选择一些点,使得每一个点都满足: 如果这个点没有被选择,则与它有边相连的所有点都必须被选择. 问:满足上述 ...

  9. 【五校联考7day1】游戏

    Description WYF从小就爱乱顶,但是顶是会造成位移的.他之前水平有限,每次只能顶出k的位移,也就是从一个整点顶到另一个整点上.我们现在将之简化到数轴上,即从 一个整点可以顶到与自己相隔在k ...

  10. 【五校联考6day2】san

    Description 小明经常去N 个地点,其中有些地点之间有直接的无向道路(共M 条这样的道路),可以直接互相到达,这些道路的长短不一.由于小明对这些道路都很熟悉,无论起点和终点在哪里,总能走最短 ...

最新文章

  1. 90行Python代码,让张小龙的微信地球转起来
  2. C语言实现数据结构之栈的详解
  3. flash也玩p2p
  4. swift5自定义构造函数和自定义变量报required init?(coder: NSCoder) { fatalError(“init(coder:) has not bee错问题
  5. mysql在cmd命令行下的相关操作
  6. HTML如何添加锚点,论程序员成长的正确姿势
  7. C++|Java工作笔记-google protobuf基本使用
  8. 递归转手动管理栈的非递归
  9. 记坑 ----- Arrays.sort()
  10. Spring Setter方法注入
  11. SpringMvc 最新jar包下载
  12. 求三维空间两直线交点
  13. 揭露培训机构以招聘名义变相招生的欺诈套路!莫被骗!附上企业黑名单!
  14. 【DevOps研发管理方案】一:方案简介
  15. 张驰咨询:某包装印刷集团第五期六西格玛项目通过专家评审
  16. 计算机管理磁盘管理无法删除卷,如何解决对磁盘重新分区磁盘卷无法删除的问题...
  17. 主板aspm关闭_华硕主板BIOS关闭secure boot和fastboot图解
  18. 奇异值分解的定义及应用
  19. C++中构造函数和析构函数调用的时机
  20. 深度干货!一篇Paper带您读懂HTAP | StoneDB学术分享会第①期

热门文章

  1. 网络推广100种方法
  2. 怎么开启2345加速浏览器的过滤弹窗广告
  3. hackthon java_Hackathon 参赛指南——如何愉快地参加一场 Hackathon
  4. snapchat为什么_什么是Snapchat?
  5. 把数字翻译成中文的计算机,数字翻译成中文,把数字翻译成中文
  6. XMAN misc writeup
  7. python读取身份证照片信息_使用Python提取身份证上的信息2
  8. Learn Python The Hard Way (python 2.7) ex45.py 你来制作一个游戏
  9. 计算机网络说明文,电脑的说明文600字
  10. Win7中删除桌面IE图标