1 solutions
-
0
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