Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define Write freopen("out.txt","w",stdout)
- #define Read freopen("in.txt","r",stdin)
- #define sf(a) scanf("%d",&a)
- #define sff(a,b) scanf("%d %d",&a,&b)
- #define sfff(a,b,c) scanf("%lld %lld %lld",&a,&b,&c)
- #define ll long long
- #define mod 100000007
- #define mx 2050
- #define Pf(t) prll f("Case %d: ",t)
- ~~~~~
- using namespace std;
- ll dp[ 10 ][ 3 ][ 82 ][82];
- ll j;
- string str;
- template <typename T>
- string to_string(T val)
- {
- stringstream stream;
- stream << val;
- return stream.str();
- }
- ll solve(string& a, ll idx, bool small,ll presum,ll ans)
- {
- if(idx>=a.size())
- {
- ans=ans%j;
- presum=presum%j;
- if(ans==0&&presum==0)
- {
- return 1;
- }
- else return 0;
- }
- if(dp[idx][small][presum][ans]!=-1)
- return dp[idx][small][presum][ans];
- ll limit=9;
- if(small)
- {
- limit=a[idx]-'0';
- }
- ll sum=0;
- for(ll i=0; i<=limit; i++)
- {
- bool ns;
- if(i<a[idx]-'0')
- {
- ns=0;
- }
- else
- {
- ns=small;
- }
- ans=((ans*10)+i)%j;
- sum+=solve(a,idx+1,ns,((presum+i)%j),ans);
- }
- dp[idx][small][presum][ans]=sum;
- return dp[idx][small][presum][ans];
- }
- int main()
- {
- ll a,b;
- int tc;
- cin>>tc;
- string z,p;
- for(int tt=1; tt<=tc; tt++)
- {
- scanf("%lld %lld %lld",&a,&b,&j);
- string a1=to_string(a-1);
- string b1=to_string(b);
- if(j==1) printf("Case %d: %lld\n",tt,b-a+1);
- else if(j>81) printf("Case %d: 0\n",tt);
- else{
- memset(dp,-1,sizeof(dp));
- ll g=solve(a1,0,1,0,0);
- memset (dp,-1, sizeof(dp));
- ll k=solve(b1,0,1,0,0);
- printf("Case %d: %lld\n",tt,k-g);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement