1 条题解
-
0
C++ :
#include <cstdio> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> #include <stack> #include <queue> #include <cmath> #include <string> #include <set> #include <map> #define NBIT 9 #define getten(a) (a/10) #define getge(a) (a%10) #define isten(a) (a >= 10) using namespace std ; int f[15][15], p ; int dig[15] ; void init () { memset (f, 0, sizeof(f)) ; f[0][0] = 1 ; for (int i=1; i<=NBIT; i++) for (int j=0; j<=9; j++) for (int k=0; k<=9; k++) if ((!isten(p) && j != getge(p)) || (isten(p) && !(j == getten(p) && k == getge(p)))) f[i][j] += f[i-1][k] ; } int getdig (int n) { int len = 0 ; while (n) { dig[++len] = n % 10 ; n /= 10 ; } return len ; } int getcount (int n) { n++ ; int len = getdig (n) ; int ans = 0 ; for (int i=len; i>0; i--) { for (int j=0; j<dig[i]; j++) //个位数的最后一位没统计到,所以统计的为[0, n-1],要+1 if ((!isten(p) && j != getge(p)) || (isten(p) && !(i < len && dig[i+1] == getten(p) && j == getge(p)))) ans += f[i][j] ; if ((!isten(p) && dig[i] == getge(p)) || (isten(p) && (i < len && dig[i+1] == getten(p) && dig[i] == getge(p)))) break ; } return ans ; } int main() { int n, m, t ; scanf ("%d%d", &t, &p) ; init () ; for (int i=0; i<t; i++) { scanf ("%d%d", &n, &m) ; printf ("%d\n", getcount(m) - getcount(n-1)) ; } return 0 ; }
- 1
信息
- ID
- 1185
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 上传者