1 / 3
Jul 2023
Got AC classic int->long long issue :frowning: 

I’ve been trying to submit my solution for https://www.spoj.com/problems/PR003004/15 but getting WA. I can’t see the issue. Can you help?
Code-
#include<bits/stdc++.h>
using namespace std;
#define ll long long

ll solve(string num,int pos,bool tight,int sum,vector<vector<vector<int>>> &dp)
{
    if(pos==num.size())
        return sum;
    if(dp[pos][tight][sum]!=-1)
        return dp[pos][tight][sum];
    ll res=0;
    if(tight)
    {
        int end_range=num[pos]-'0';
        for(int i=0;i<=end_range;i++)
        {
            if(i!=end_range)
                res+=solve(num,pos+1,0,sum+i,dp);
            else
                res+=solve(num,pos+1,1,sum+i,dp);
        }
    }
    else
    {
        for(int i=0;i<=9;i++)
        {
            res+=solve(num,pos+1,0,sum+i,dp);
        }
    }
    return dp[pos][tight][sum]=res;
}

int main()
{
    int t;
    cin>>t;
    while(t--)
    {
    ll a,b;
    cin>>a>>b;
    vector<vector<vector<int>>> dp1(20,vector<vector<int>>(2,vector<int>(180,-1)));
    vector<vector<vector<int>>> dp2(20,vector<vector<int>>(2,vector<int>(180,-1)));
    ll ans1=solve(to_string(max(a-1,(ll)0)),0,1,0,dp1);
    ll ans2=solve(to_string(b),0,1,0,dp2);
    cout<<ans2-ans1<<endl;
    }
}
  • created

    Jul '23
  • last reply

    Jul '23
  • 2

    replies

  • 459

    views

  • 2

    users

  • 1

    like

  • 1

    link

Try this:

1
0 1000000000000000

Expected answer is 67500000000000001.

edit: ah just seen your edit, you figured it out.