#include<bits/stdc++.h>#defineintlonglongusingnamespace std;constint N =12;int a[N];//把整数的每一位数字抠出来,存入数组int f[N][N];//f[i][j]表示一共有i位,且最高位数字是j的不降数的个数voidinit(){//预处理不降数的个数for(int i =0; i <=9; i++) f[1][i]=1;//一位数for(int i =2; i < N; i++){//阶段:枚举位数for(int j =0; j <=9; j++){//状态:枚举最高位for(int k = j; k <=9; k++){//决策:枚举次高位
f[i][j]+= f[i -1][k];}}}}intdp(int n){if(n ==0)return1;int cnt =0;while(n) a[++cnt]= n %10, n /=10;int res =0, last =0;for(int i = cnt; i >=1; i--){int now = a[i];for(int j = last; j < now; j++){
res += f[i][j];}if(now < last)break;
last = now;if(i ==1) res++;}return res;}signedmain(){#ifndefONLINE_JUDGEfreopen("test.in","r",stdin);freopen("test.out","w",stdout);#endifinit();int l, r;while(cin >> l >> r){
cout <<dp(r)-dp(l -1)<< endl;}return0;}
#include<bits/stdc++.h>#defineintlonglongusingnamespace std;constint N =12;int a[N];//把整数的每一位数字抠出来,存入数组int f[N][10];//f[i][j]表示一共有i位,且最高位数字为j的Windy数的个数voidinit(){for(int i =0; i <=9; i++) f[1][i]=1;for(int i =2; i < N; i++){for(int j =0; j <=9; j++){for(int k =0; k <=9; k++){if(abs(j - k)>=2) f[i][j]+= f[i -1][k];}}}}intdp(int n){if(!n)return0;int cnt =0;while(n) a[++cnt]= n %10, n /=10;int res =0, last =-2;for(int i = cnt; i >=1; i--){//答案为cnt位的int now = a[i];for(int j =(i == cnt); j < now; j++){//最高位从1开始if(abs(j - last)>=2){
res += f[i][j];}}if(abs(now - last)<2)break;
last = now;if(i ==1) res++;}for(int i =1; i < cnt; i++){//答案小于cnt位的for(int j =1; j <=9; j++){
res += f[i][j];}}return res;}signedmain(){#ifndefONLINE_JUDGEfreopen("test.in","r",stdin);freopen("test.out","w",stdout);#endifinit();int l, r;
cin >> l >> r;
cout <<dp(r)-dp(l -1);return0;}
#include<bits/stdc++.h>#defineintlonglongusingnamespace std;constint N =34;int a[N];//把B进制数的每一位抠出存入数组int f[N][N];//f[i][j]表示在i个位置上,放置j个1的组合数int k, b;voidinit(){for(int i =0; i < N; i++) f[i][0]=1;for(int i =1; i < N; i++){for(int j =0; j <= i; j++){
f[i][j]= f[i -1][j -1]+ f[i -1][j];}}}intdp(int n){if(!n)return0;int cnt =0;while(n) a[++cnt]= n % b, n /= b;int res =0, last =0;//last表示第i位之前放置1的个数for(int i = cnt; i >=1; i--){//从高位到低位枚举int now = a[i];//当前的数字if(now >=1){//第i位==0时,直接跳过,继续枚举下一位
res += f[i -1][k - last];//这一位放0if(now ==1){//第i位==1时,不能用组合数计算,继续枚举下一位
last++;if(last > k)break;}else{if(k - last -1>=0) res += f[i -1][k - last -1];break;//第i位放大于1的数,不合要求,则break}}if(i ==1&& last == k) res++;//特判,走到末位的情况}return res;}signedmain(){#ifndefONLINE_JUDGEfreopen("test.in","r",stdin);freopen("test.out","w",stdout);#endifinit();int l, r;
cin >> l >> r >> k >> b;
cout <<dp(r)-dp(l -1)<< endl;return0;}