酷代码 AI
菜单
服务商
DeepSeek字节豆包
更多选项

黄金城护盾修复:红蓝晶石最优分配算法

根据题目条件,我们可以设红晶石数量为r,蓝晶石数量为b,则: - r + b = m - 5r + 3b = n 从第一个方程得 b = m - r,代入第二个方程: 5r + 3(m - r) = n 5r + 3m - 3r = n 2r = n - 3m r = (n - 3m) / 2 因为r必须是整数且介于0到m之间,所以需要(n - 3m)为偶数且0 ≤ (n - 3m)/2 ≤ m。题目保证数据有解。 实现时,我们只需要计算r的值,然后b = m - r,直接输出一个方案即可。但题目要求“所有可能的方案”,实际上由于方程线性唯一,只有唯一解,所以输出唯一方案即可。 ```cpp #include <iostream> using namespace std; int main() { int n, m; cin >> n >> m; // 解线性方程组得到唯一解 int r = (n - 3 * m) / 2; int b = m - r; // 验证解是否合法(题目保证合法,但以防万一) if (r >= 0 && b >= 0 && 5 * r + 3 * b == n) { cout << r << " " << b << endl; } return 0; } ``` ## 🚀 代码说明 - 根据数学推导直接计算出红晶石数量`r`和蓝晶石数量`b`。 - 因为方程是线性且独立的,所以只有唯一解。 - 输出格式为每行两个整数,题目只要求输出所有可能方案,但实际只有一个,所以直接输出。 ## 📌 关键点 - 利用代数方法避免循环遍历,提高效率。 - 检查解的合法性(非负且满足能量总和)。 ######[AI问答 | 435点数解答 | 2026-08-22 21:42:24]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]