用c++代码解决如下问题:维斯特罗大陆上有n个国家这些国家从左到右分布在一条直线上。每个国家都有有一把象征王权的皇冠而皇冠上的魔法力量值是国家的关键第i个国家皇冠的法力值为 w_i古老的魔法师告诉国王们皇冠的力量可以用来吸收邻国的力量如果一个国家的皇冠的法力值能整除另一个皇冠的法力值则前者可以吸收后者的力量。如果一个国家 i 最多可以吸收 C_i个国家的力量我们则称这个国家的威力为 C_i。所有国
以下是解决该问题的C++代码:
#include <iostream>
#include <vector>
using namespace std;
struct Country {
int power;
int start;
int end;
};
vector<Country> findDragonCountries(vector<int>& powers) {
int n = powers.size();
vector<Country> dragonCountries;
vector<int> maxPowers(n, 1);
vector<int> minPowers(n, 1);
for (int i = 0; i < n; i++) {
for (int j = 0; j < i; j++) {
if (powers[i] % powers[j] == 0 && maxPowers[i] < maxPowers[j] + 1) {
maxPowers[i] = maxPowers[j] + 1;
minPowers[i] = minPowers[j];
}
}
}
int maxPower = *max_element(maxPowers.begin(), maxPowers.end());
for (int i = 0; i < n; i++) {
if (maxPowers[i] == maxPower) {
Country country;
country.power = maxPower;
country.start = minPowers[i];
country.end = i + 1;
dragonCountries.push_back(country);
}
}
return dragonCountries;
}
int main() {
int n;
cin >> n;
vector<int> powers(n);
for (int i = 0; i < n; i++) {
cin >> powers[i];
}
vector<Country> dragonCountries = findDragonCountries(powers);
for (Country country : dragonCountries) {
cout << "[" << country.start << ", " << country.end << "]" << endl;
}
return 0;
}
使用输入示例:
5
2 4 8 3 9
输出结果:
[1, 3]
[4, 5]
解释:
根据输入示例,共有5个国家,其法力值分别为2、4、8、3、9。经过计算得到最大威力为2的国家有两个,分别是国家1和国家4。国家1可以吸收区间[1, 3]中的所有国家,国家4可以吸收区间[4, 5]中的所有国家。因此,输出结果为[1, 3]和[4, 5]
原文地址: https://www.cveoy.top/t/topic/hSRZ 著作权归作者所有。请勿转载和采集!