Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:为什么老是tle啊,我用高精度+dp。。。那位大侠帮帮忙,教教我怎么改?In Reply To:为什么老是tle啊,我用高精度+dp。。。那位大侠帮帮忙,教教我怎么改? Posted by:howie_wu at 2006-07-31 20:55:34 > > #include <string> > #include <cstdio> > using namespace std; > > > const int MAX = 1000001; > char w[MAX][80]; > int l[MAX]; > > > int str_add(char *a, char *b, char *c1) > { > char *c; > int p, q; > int i, j; > int tmp; > bool flag; > c = new char[100]; > p = strlen(a)-1; > q = strlen(b)-1; > flag = false; > j = 0; > while (q >= 0) { > tmp = a[p--] + b[q--] - 96; > if (flag) { > tmp++; > } > flag = false; > if (tmp >= 10) { > tmp -= 10; > flag = true; > } > c[j++] = char(tmp+48); > } > while (p >= 0) { > tmp = a[p--] - 48; > if (flag) { > tmp++; > } > flag = false; > if (tmp >= 10) { > tmp -= 10; > flag = true; > } > c[j++] = char(tmp+48); > } > if (flag) { > c[j++] = '1'; > } > c[j] = '\0'; > j = 0; > for (i=strlen(c)-1; i>=0; i--) { > c1[j++] = c[i]; > } > c1[j] = '\0'; > return 0; > } > > > > int main() > { > int n; > int i, j, k; > int len; > char out[10]; > > > strcpy(w[1], "1"); > strcpy(w[2], "2"); > > l[1] = 1; > l[2] = 2; > > for (i=3; i<MAX; i++) > { > if (i%2 == 1) > strcpy(w[i], w[i-1]); > else > str_add(w[i-2], w[i/2], w[i]); > > len = strlen(w[i]); > j = 0; > if (len >= 10) > { > j = len - 9; > } > l[i] = atoi(w[i]+j); > } > > while (scanf("%d", &n) != EOF) > { > printf("%d\n", l[n]); > } > return 0; > } 不用高精度 递推的时候mod 1000000000就行 Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator