首个题解
2025-03-28 18:19:38
发布于:广东
1阅读
0回复
0点赞
解:
#include <iostream>
#include <vector>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
using namespace std;
int sumOfDivisors(int x) {
int sum = 1;
for (int i = 2; i * i <= x; ++i) {
if (x % i == 0) {
sum += i;
if (i != x / i) {
sum += x / i;
}
}
}
return sum;
}
int dfs(int num, unordered_map<int, vector<int>>& transform, unordered_set<int>& visited) {
visited.insert(num);
int maxSteps = 0;
for (int nextNum : transform[num]) {
if (visited.find(nextNum) == visited.end()) {
int steps = 1 + dfs(nextNum, transform, visited);
maxSteps = max(maxSteps, steps);
}
}
visited.erase(num);
return maxSteps;
}
int main() {
int n;
cin >> n;
unordered_map<int, vector<int>> transform;
for (int i = 1; i <= n; ++i) {
int sum = sumOfDivisors(i);
if (sum < i && sum <= n) {
transform[i].push_back(sum);
transform[sum].push_back(i);
}
}
int maxSteps = 0;
for (int i = 1; i <= n; ++i) {
unordered_set<int> visited;
int steps = dfs(i, transform, visited);
maxSteps = max(maxSteps, steps);
}
cout << maxSteps << endl;
return 0;
}
一定要开心
这里空空如也
有帮助,赞一个