Submission #58564

#TimeUsernameProblemLanguageResultExecution timeMemory
58564BatrrPalindrome-Free Numbers (BOI13_numbers)C++14
72.50 / 100
4 ms1048 KiB
#include <bits/stdc++.h>
/*
#pragma comment(linker, "/stack:200000000")
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4")
*/
#define ll long long                   
#define f first 
#define s second 
#define pb push_back               
#define mp make_pair 
#define IOS ios_base::sync_with_stdio(0);

using namespace std;                    

const ll maxn=2e5+123,inf=1e18,mod=1e9+7,N=360360,LOG=20;
ll a,b,ans;
vector<int> av,bv;
vector<int> tov(ll x){
    vector<int> res;
    while(x){
        res.pb(x%10);
        x/=10;
    }
    reverse(res.begin(),res.end());
    return res;
}
ll calc(int a,int b,int len){
    if(len==0)
        return 1;
    ll res=1;
    if(b==-1)
        res=9,len--;    
    while(len--)
        res*=8;
    return res;
}
ll get(vector<int> s){
    ll res=pow(8,s.size()-2)*9;
    //cout<<res<<endl;
    for(int i=0;i<s.size();i++){
        int a,b,c;
        a=b=-1;
        if(i>1)
            a=s[i-2];
        if(i>0)
            b=s[i-1];
        for(int j=(i==0);j<s[i];j++){
            c=j;
            if(a==c || b==c)
                continue;
    //        cout<<a<<" "<<b<<" "<<c<<" "<<i<<" "<<endl;
            res+=calc(a,b,s.size()-1-i);
        }
        if(i>0 && s[i]==s[i-1])
            break;
        if(i>1 && s[i]==s[i-2])
            break;
        if(i==s.size()-1)
            res++;
    }    
    return res;
}
int main(){
    #ifdef LOCAL
        freopen ("test.in", "r", stdin);
    #endif                                     
    cin>>a>>b;   
    if(a<10){
        bv=tov(b);
        cout<<get(bv);
        return 0;
    }                    
    av=tov(a-1);
    bv=tov(b);
    cout<<get(bv)-get(av);
}

Compilation message (stderr)

numbers.cpp: In function 'long long int get(std::vector<int>)':
numbers.cpp:41:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<s.size();i++){
                 ~^~~~~~~~~
numbers.cpp:59:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if(i==s.size()-1)
            ~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...