题解 | A36.优秀的拆分
2024-10-27 15:04:35
发布于:广东
19阅读
0回复
0点赞
自制讲解视频
注:思路和解析都在视频中
20分 Code
#include <bits/stdc++.h>
#define ll long long
using namespace std;
vector<int> a;
bool dfs(int cnt, int n, int ln) {
if (cnt == n + 1) {
ll sum = 0;
for (auto &i : a)
sum += pow(2, i);
if (sum == n)
for (int i = a.size() - 1; i >= 0; i ++)
cout << pow(2, a[i]) << " ";
return sum == n;
}
for (int i = 1; i <= ln; i ++) {
a.push_back(i);
if (dfs(cnt + 1, n, ln)) return 1;
a.pop_back();
}
return 0;
}
int main() {
int n;
cin >> n;
bool h = dfs(1, n, log2(n));
if (!h) cout << -1;
return 0;
}
60分 Code
#include <bits/stdc++.h>
#define ll long long
using namespace std;
vector<int> a;
void dfs(int cnt, int n, int ln) {
if (cnt == n + 1) {
ll sum = 0;
for (auto &i : a)
sum += pow(2, i);
if (sum == n)
for (int i = a.size() - 1; i >= 0; i ++)
cout << pow(2, a[i]) << " ";
}
for (int i = 1; i <= ln; i ++) {
a.push_back(i);
dfs(cnt + 1, n, ln);
a.pop_back();
}
return;
}
int main() {
int n;
cin >> n;
if (n % 2) {
cout << -1;
return 0;
}
dfs(1, n, log2(n));
return 0;
}
AC Code
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main() {
int n;
cin >> n;
if (n % 2) {
cout << -1;
return 0;
}
int cnt = 0;
vector<int> a;
while (n) {
if (n % 2)
a.push_back(pow(2, cnt));
n /= 2;
cnt ++;
}
for (int i = a.size() - 1; i >= 0; i --)
cout << a[i] << " ";
return 0;
}
如有差错请指出!
点个赞支持一下吧!
全部评论 3
帮顶
2024-10-27 来自 广东
3顶
2024-10-27 来自 广东
3顶(+精)
2024-10-27 来自 广东
3
有帮助,赞一个