1 solutions

  • 0
    @ 2025-12-3 17:18:54

    C++ :

    #include <cstdio>
    using namespace std;
    typedef long long LL;
    
    LL l,r;
    
    LL f[25][25][1<<11];
    void init() {
    	int S = 1<<10;
    	for (int i = 0; i <= 9; i++) f[1][i][1<<i] = 1;
    	for (int i = 1; i <= 18; i++)
    		for (int j = 0; j <= 9; j++)
    			for (int s = 0; s < S; s++)
    				for (int k = 0; k <= 9; k++)
    					f[i][j][s] += f[i-1][k][1<<j^s];
    }
    
    int num[25],len;
    LL calc(LL x) {
    	if(x < 10) return 0;
    	len = 0;
    	for (LL i = x; i; i/=10) num[++len] = i%10;
    	LL res = 0;
    	for (int i = 2; i < len; i++)
    		if(i%2 == 0)
    			for (int j = 1; j <= 9; j++) res += f[i][j][0];
    	int nows = 0;
    	for (int i = len; i; i--) {
    		int j = 0;
    		if(i == len) j = 1;
    		for (; j < num[i]; j++)
    			res += f[i][j][nows];
    		nows ^= 1<<num[i];
    	}
    	return res+(nows==0);
    }
    
    int main() {
    	init();
    	scanf("%lld%lld",&l,&r);
    	printf("%lld\n",calc(r)-calc(l-1));
    	return 0;
    }
    
    
    • 1

    Information

    ID
    989
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    (None)
    # Submissions
    0
    Accepted
    0
    Uploaded By