Wunder Fund Round 2016 (Div. 1 + Div. 2 combined) ---补题
| A | Slime Combining |
我的代码:
思路一丨模拟:
#include
using namespace std;
const int maxn = 100000 + 5;
int k[maxn];
int main(){int n;cin >> n;int t = 0;int cur;while(n--) {k[t] = 1;cur = t;while(cur != 0 && k[cur] == k[cur-1]) {k[cur-1] += 1;cur = cur-1;}t = cur + 1;}for(int i = 0; i < t; i++) {cout << k[i] << " ";}cout << endl;return 0;
}
复杂度O(n).
思路二丨二进制:
#include
#include
using namespace std;
const int maxl = 20;
int l[maxl];
int main() {int n;cin >> n;int t = 1;int c = 0;memset(l, 0, sizeof(l));while(n) {c = n&1;n >>= 1;if(c) l[t] = t;t++;}for(int i = t-1; i >= 1; i--) {if(l[i])cout << l[i] << " ";}cout << endl;cout << endl;return 0;
}
复杂度O(lgn).
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
