1 条题解
-
0
快就是对!
#include<bits/stdc++.h> using namespace std; #define ll long long const ll p=1e9+7; struct node { ll u,v,w; }f[20][10][10]; int t,len,a[20]; ll l,r,v[20]; node dfs(int k,int x,int y,int q) { if(!k) return node{x&&y,0,0}; if(!q&&~f[k][x][y].u) return f[k][x][y]; int z=q?a[k]:9; node res={0,0,0},tmp; for(int i=0;i<=z;i++) { if(i==7) continue; tmp=dfs(k-1,(x+i)%7,(y*10+i)%7,q&&(i==z)); res.u=(res.u+tmp.u)%p; res.v=(res.v+tmp.v+i*v[k-1]%p*tmp.u%p)%p; res.w=(res.w+tmp.w+i*i%p*v[k-1]%p*v[k-1]%p*tmp.u%p+i*v[k-1]%p*tmp.v%p*2%p)%p; } if(!q) f[k][x][y]=res; return res; } ll divide(ll x) { len=0; while(x) { a[++len]=x%10; x/=10; } return dfs(len,0,0,1).w; } int main() { memset(f,-1,sizeof(f)); scanf("%d",&t); for(int i=v[0]=1;i<20;i++) v[i]=v[i-1]*10%p; while(t--) { scanf("%lld%lld",&l,&r); printf("%lld\n",(divide(r)-divide(l-1)+p)%p); } return 0; }
- 1
信息
- ID
- 647
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- 递交数
- 4
- 已通过
- 4
- 上传者