HDU2541_Simple Addition Expression
2012-07-24 13:49
323 查看
/* *Time: 93ms *题目大意: * 求i+(i+1)+(i+2)的结果对于有没有进位,没有进位的称为Simple Addition Expression * 给定一个n,求i < n有多少个数可以称为simple Addition Expression. *解题思路: * 总共有786432个符合要求的数据。所以可以用暴力。 * 求出所有的满足的simple Addition Expression的数。之后用二分查找位置即可。 */
View Code
#include <iostream> #include <algorithm> #include <iterator> using namespace std; const int MAX = 1000000; int num[10], cnt; __int64 res[MAX]; __int64 arrayToInt64(int arr[], int n) { __int64 digit = 1, sum = 0; for(int i = n; i >= 0; i--) { sum += arr[i] * digit; digit *= 10; } return sum; } void dfs(int digit) { if(digit != 9) { for(int i = 0; i < 4; i++) { num[digit] = i; dfs(digit + 1); } } else { for(int i = 0; i < 3; i++) { num[digit] = i; res[cnt++] = arrayToInt64(num, digit); } } return ; } void viewArr(__int64 a[], int n) { for(int i = 0; i < n; i++) cout << a[i] << endl; return ; } int countNum(__int64 n) { __int64 *p; p = lower_bound(res, res+ cnt, n); return p - res; } int main(void) { //freopen("in.txt", "r", stdin); cnt = 0; dfs(0); //viewArr(res, 10); __int64 n; while(scanf("%I64d", &n) == 1) { printf("%d\n", countNum(n)); } return 0; } /* *Time: 0ms *还是不怎么理解这种做法 */ #include <stdio.h> #include <math.h> #include <string.h> char s[15]; /* 传入数组下标i和,从当前位置开始剩余的数组长度。 */ int solve(int i,int p) { if(p==1) return s[i]>'2'?3:s[i]-'0'+1; /*当前值大于3,当然就可以取遍0-3的数字,这样子排列组合出的数值也一定比它小*/ if (s[i]>'3') return (int)pow(4.0,p-1)*3; else { /*如果s[i] = 2,则取0-1时,后面的数字可以取遍0-3,除个位为3*/ int tem1 = (int)(pow(4.0,p-2)*3*(s[i]-'0')); /*s[i]取2时,后面的数值就又是一次迭代计算啦*/ int tem2 = solve(i+1,p-1); return tem1+tem2; } } int main() { int len; __int64 n; while (scanf("%I64d",&n)!=EOF) { n--;/*排列组合最大的数字就是n-1啦*/ sprintf(s,"%I64d",n); len = strlen(s); printf("%d\n",solve(0,len)); } return 0; }
相关文章推荐
- HDU Simple Addition Expression
- Simple Addition Expression(排列组合)
- 【HDOJ】2451 Simple Addition Expression
- hdu 2451 Simple Addition Expression(数位DP )成败在于细节
- HDU2451:Simple Addition Expression
- hdu 2451 Simple Addition Expression(数位DP )成败在于细节
- [数位dp] hdu 2451 Simple Addition Expression
- hdu 2451 Simple Addition Expression
- 组合数学第一发 hdu 2451 Simple Addition Expression
- 【HDOJ】2451 Simple Addition Expression
- HDU2451 Simple Addition Expression
- HDOJ 2451 Simple Addition Expression
- HDU 2451 Simple Addition Expression
- hdoj 2451 Simple Addition Expression
- hdu 2451 Simple Addition Expression(数位dp)
- Simple Addition Expression
- 组合数学第一发 hdu 2451 Simple Addition Expression
- HDU2451 Simple Addition Expression
- HDU 2451 Simple Addition Expression
- HDU Simple Addition Expression 题解