1 条题解

  • 0
    @ 2023-5-24 21:02:26

    快就是对!

    #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

    「一本通 5.3 练习 3」恨 7 不成妻

    信息

    ID
    647
    时间
    1000ms
    内存
    512MiB
    难度
    10
    标签
    递交数
    4
    已通过
    4
    上传者