链接:https://ac.nowcoder.com/acm/contest/59840/G 来源:牛客网 题目描述 在一款开放世界的冒险游戏中,玩家扮演旅行者,探索各种不同风景的区域,与各种怪物战斗,并解决谜题和任务。游戏中的角色分为不同的元素属性,如火、水、雷等,每个角色都有独特的技能和元素反应能力。 玩家可以通过抽取角色来获取新的角色,每个角色都有自己的技能和武器类型。 现在问题是: 有n个不同职业的玩家,编号从1到n,地图上有m个不同的怪物,每个怪物都有一个属性值ai,表示克制该怪物的职业编号。 如果当前职业擅长克制当前怪物,则玩家只需花费1分钟即可消灭怪物;否则,需要花费2分钟。 每个玩家一次只能攻击一个怪物。 求对于所有的怪物,玩家们需要多长时间才能一起将它们全部消灭。 输入描述: 第一行是一个整数T,表示测试用例的数量。 每个测试用例包含两行: 第一行是两个整数n和m,表示玩家数量和怪物数量。 第二行是m个整数A1,A2,...,Am(1<=Ai<=n),表示克制第i个怪物的职业编号。 输出描述: 对于每个测试用例,输出一个整数,表示玩家们一起消灭所有怪物所需的最短时间。
时间: 2024-03-30 15:36:16 浏览: 113
这是一道贪心算法的题目。我们可以将每个怪物按照其属性值进行分类,然后将每个分类中需要攻击的怪物数量与对应的职业数量进行比较,选择需要攻击怪物数量较多的分类中拥有对应职业数量最多的玩家进行攻击,直到所有怪物都被攻击完毕。具体实现可以使用一个数组来记录每个职业和每个分类中需要攻击的怪物数量,然后使用一个优先队列(堆)来维护每个职业的数量,每次选择堆顶元素(数量最多的职业)进行攻击,并更新相应的数量和堆。时间复杂度为O(mlogn)。
相关问题
链接:https://ac.nowcoder.com/acm/contest/68233/B 来源:牛客网 输入三个整数,求以下三数的和, 1+2+...+a + 12+22+...+b2 + 1/1+1/2+...+1/c
这道题目需要求解的是一个数学问题,需要对题目进行分析。首先,我们可以将题目中的三个数列分别求和,得到1到a的和、12到b的平方和以及1到1/c的倒数和。接下来,我们需要根据引用[3]中的思路,从中任取两场比赛,对满足和各出现一次的做统计,结果数即为(a-1)*(b-1)*(c-1)。最终答案就是三个数列的和乘以结果数。具体的计算过程可以参考下面的公式:
sum = (a*(a+1))/2 + (b*(b+1)*(2*b+1))/6 + (1/((double)c)*(1+(1/((double)c-1)))) * (a-1)*(b-1)*(c-1);
其中,(a*(a+1))/2表示1到a的和,(b*(b+1)*(2*b+1))/6表示12到b的平方和,(1/((double)c)*(1+(1/((double)c-1))))表示1到1/c的倒数和,(a-1)*(b-1)*(c-1)表示结果数。
链接:https://ac.nowcoder.com/acm/contest/61132/G 来源:牛客网 给定一个长度为n的01串,你需要选择一段任意长度(可以为0)的区间对其翻转,翻转后,求最长的一段连续的全是1的区间的长度。c++生成
以下是使用C++编写的解决方案:
```cpp
#include <iostream>
#include <vector>
int max_ones(std::vector<int>& nums) {
int n = nums.size();
std::vector<int> dp(n, 0); // dp数组记录以当前位置结尾的最长连续1的长度
int max_len = 0; // 最长连续1的长度
for (int i = 0; i < n; i++) {
if (nums[i] == 1) {
dp[i] = (i > 0) ? dp[i-1] + 1 : 1; // 当前位置是1,更新dp数组
} else {
dp[i] = 0; // 当前位置是0,重置dp数组
}
max_len = std::max(max_len, dp[i]); // 更新最长连续1的长度
}
return max_len;
}
int main() {
int n; // 01串的长度
std::vector<int> nums;
std::cin >> n;
for (int i = 0; i < n; i++) {
int num;
std::cin >> num;
nums.push_back(num);
}
int result = max_ones(nums);
std::cout << result << std::endl;
return 0;
}
```
请将上述代码保存为一个.cpp文件,然后使用C++编译器进行编译运行。在运行时,首先输入01串的长度n,然后依次输入n个数字,每个数字代表对应位置的元素(0或1)。
注意:上述代码是根据题目描述编写的,但在实际使用中,应该添加输入数据的验证和错误处理机制。
阅读全文