【算法】P1010 [NOIP1998 普及组] 幂次方 解题代码
2023-12-13 20:34:26
dfs记忆化搜索没什么可说的
#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <unordered_map>
#include <vector>
#define endl '\n'
using namespace std;
unordered_map<int, string> mp;
int n;
string join(vector<string> &strs, string split){
string t;
for (int i = strs.size() - 1; i >= 0; i--)
{
t += strs[i] + split;
}
t.pop_back();
return t;
}
string dfs(int n){
int k = n;
int i = 0;
if (n == 0) return "2(0)";
if (n == 1) return "2";
vector<string> vec;
while (k){
if (k % 2){
if (!mp.count(i)){
vec.push_back(dfs(i));
}else{
vec.push_back(mp[i]);
}
}
i ++;
k /= 2;
}
string s = join(vec, "+");
mp[n] = "2(" + s + ")";
return "2(" + s + ")";
}
int main(){
cin.tie(0), cout.tie(0);
cin >> n;
string ans = dfs(n).substr(2);
ans.pop_back();
cout << ans << endl;
return 0;
}
文章来源:https://blog.csdn.net/qq_39757593/article/details/134883763
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!