HDU 2089 数位DP

来源:互联网 发布:js中int转string 编辑:程序博客网 时间:2024/04/20 08:50
#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>using namespace std;int l, r;/* *  0 不包含62 *  1 以2开头不包含62 *  2 包含62 */int dp[11][3], f[11];void init() {int i, j;f[0] = 1;for(i = 0; i <= 9; i++) f[i] = f[i-1] * 10;dp[0][0] = 1;for(i = 1; i <= 9; i++) {dp[i][0] = dp[i-1][0] * 9 - dp[i-1][1];dp[i][1] = dp[i-1][0];//dp[i][2] = dp[i-1][1] + dp[i-1][2] * 9;}}int gao(int n) {int a[11], len = 0;while(n) {a[len++] = n%10; n/=10; }int i, j, ans = 0; a[len] = 0;bool flag = 0;for(i = len-1; i >= 0; i--) {for(j = 0; j < a[i]; j++) {if(flag || (a[i+1] == 6 && j == 2) || j == 4 ) continue;if(j == 6) ans += dp[i][0]-dp[i][1];else ans += dp[i][0];}if(a[i] == 4 || (a[i+1] == 6 && a[i] == 2)) flag = 1;}if(!flag) ans++;return ans;}int main() {int i, j;init();while( cin >> l >> r) {if(!l && !r) break;cout << gao(r) - gao(l-1) << endl;}return 0;}

原创粉丝点击