제출 #488809

#제출 시각아이디문제언어결과실행 시간메모리
488809dpw4112001Palindrome-Free Numbers (BOI13_numbers)C++14
0 / 100
1097 ms720 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long

const int mod = 1e9 + 7;
int dp[18][11][11][2];


int solve(string s,int i,int last,int secondlast,int tight)
{
    if(i == s.length())
    {
        return 1;
    }
    if(dp[i][last][secondlast][tight]!= -1)return dp[i][last][secondlast][tight];

    int limit = tight ? s[i] - '0' : 9;
    int ans = 0;


    for(int d = 0;d<=limit;d++)
    {
        if(d == last)
            continue;
        if(d == secondlast)
            continue;
        ans = ans + solve(s,i+1,d,last,tight && (d == limit));
    }

    return dp[i][last][secondlast][tight] = ans;


}

int getAns(string s)
{
    int ans = 1;

    int l = s[0] - '0';

    for(int i=1;i<=l;i++)
    {
        ans = ans + solve(s,1,i,i,i == l);
    }

    for(int i=2;i<s.size();i++)
    {
        for(int j=1;j<=9;j++)
        {
            ans += solve(s,i,j,j,0);
        }

    }
    return ans;
}
signed main()
{
    

    int t;
    cin >> t;
    while(t--)
    {
        int l,r;
        cin >> l >> r;

        memset(dp,-1,sizeof dp);
        
        int x = getAns(to_string(l-1));

        memset(dp,-1,sizeof dp);

        int y = getAns(to_string(r));

       // cout << x << ' ' << y << '\n';

        cout << y - x << '\n';



    }
}

컴파일 시 표준 에러 (stderr) 메시지

numbers.cpp: In function 'long long int solve(std::string, long long int, long long int, long long int, long long int)':
numbers.cpp:11:10: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   11 |     if(i == s.length())
      |        ~~^~~~~~~~~~~~~
numbers.cpp: In function 'long long int getAns(std::string)':
numbers.cpp:46:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   46 |     for(int i=2;i<s.size();i++)
      |                 ~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...