# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
121575 | DodgeBallMan | Palindrome-Free Numbers (BOI13_numbers) | C++14 | 3 ms | 768 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
long long a, b, dp[20][2][15][15][2];
vector<int> num;
long long solve( int pos = 0, int st1 = 0, int di1 = 10, int di2 = 10, int st2 = 0 ) {
if( !num[pos] ) return 1LL;
if( dp[pos][st1][di1][di2][st2] != -1 ) return dp[pos][st1][di1][di2][st2];
if( pos >= num.size() ) return 1LL;
int mx, ret = 0;
if( !st1 ) mx = num[pos];
else mx = 9;
for( int dgt = 0 ; dgt <= mx ; dgt++ ) {
if( dgt == di1 || dgt == di2 ) continue;
int boi = st1;
if( st1 == 0 && dgt < mx )boi = 1;
if( !st2 && !dgt )ret += solve( pos + 1, boi, 10, 10, 0 );
else ret += solve( pos + 1, boi, di2, dgt, 1 );
}
return dp[pos][st1][di1][di2][st2] = ret;
}
long long bef( long long x ) {
num.clear();
while( x > 0 ){
num.emplace_back( x%10 );
x /= 10;
}
reverse( num.begin(), num.end() );
memset( dp, -1, sizeof dp );
return solve();
}
int main()
{
scanf("%lld %lld",&a,&b);
printf("%lld",bef( b ) - bef( a - 1 ) );
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |