ural 1803
2014-08-10 00:13
295 查看
求Fibonacci的第n项K进制表示后各个位的和。
采用压缩的方式,表示成k ^ n进制,k ^ n < 1000000的,可以先预处理出来k ^ n各个数的位数之和。
然后直接采用模拟加法的方法进行计算。
采用压缩的方式,表示成k ^ n进制,k ^ n < 1000000的,可以先预处理出来k ^ n各个数的位数之和。
然后直接采用模拟加法的方法进行计算。
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 3000; long long f[maxn]; struct Ans { int cnt_num; int order; bool operator < (const struct Ans &a) const { if (cnt_num == a.cnt_num) { return order < a.order; } return cnt_num < a.cnt_num; } }; int sum[1000007]; struct Bign { int num[maxn]; int num_len; int getAns() { int ret = 0; for (int i = 0; i < num_len; i++) { ret += sum[num[i]]; } return ret; } Bign() { num_len = 0; memset(num, 0, sizeof(num)); } }; int n, k; struct Bign a, b, c; struct Ans ans[50007]; int mod; int main() { // freopen("in.txt", "r", stdin); scanf("%d%d", &k, &n); mod = k; while (mod * k <= 1000000) { mod = mod * k; } for (int i = 0; i <= mod; i++) { int x = i; int temp = 0; while (x) { temp += x % k; x /= k; } sum[i] = temp; } a.num[0] = 1; a.num_len = 1; b.num[0] = 1; b.num_len = 1; ans[1].cnt_num = 1; ans[1].order = 1; ans[2].cnt_num = 1; ans[2].order = 2; for (int i = 3; i <= n; i++) { int pre = 0; int j; for (j = 0; j < a.num_len || j < b.num_len || pre; j++) { int next = (a.num[j] + b.num[j] + pre) % mod; c.num[j] = next; pre = (a.num[j] + b.num[j] + pre) / mod; } c.num_len = j; ans[i].order = i; ans[i].cnt_num = c.getAns(); a = b; b = c; } sort(ans + 1, ans + 1 + n); for (int i = 1; i <= n; i++) { printf("%d ", ans[i].order); } return 0; }
相关文章推荐
- ACM k进制高精度优化 URAL 1803 The Czechs' Rifles 滚动数组
- URAL_1095_Nikifor 3
- ural 1519 Formula 1
- URAL 1036 Lucky Tickets
- URAL 1055 Combinations
- ural 1165 subnumber ------猥琐的超级大繁题
- URAL 1100 Final Standings
- ural 1521. War Games 2 约瑟夫环 SBT实现
- ural 1080 Map Coloring DFS染色
- ural 1280Topological Sorting
- ural1707 线段树扫描线
- hdu 3068 and ural 1297
- URAL - 1022 - Genealogical Tree(拓扑排序)
- Ural 1019 Line Painting
- ural 1613. For Fans of Statistics
- ural 1011 Conductors
- Ural 1018 树dp
- ural 1010. Discrete Function
- ural 1007. Code Words
- ural 1133. Fibonacci Sequence