小核桃侦探仓库部署问题的C++解决方案
以下是解决该问题的C++代码: ```cpp #include <iostream> #include <vector> #include <climits> using namespace std; // 计算距离总和 int calculateDistance(int x, int y, int m, int centerX, int centerY) { int distance = 0; for (int i = y; i < y + m; i++) { distance += abs(x - centerX) + abs(i - centerY); } return distance; } // 寻找合适的位置 vector<int> findPosition(vector<vector<bool>>& warehouse, int m, int centerX, int centerY) { int minDistance = INT_MAX; int bestX = -1, bestY = -1; int K = warehouse.size(); for (int i = 0; i < K; i++) { for (int j = 0; j <= K - m; j++) { bool canPlace = true; for (int k = 0; k < m; k++) { if (warehouse[i][j + k]) { canPlace = false; break; } } if (canPlace) { int distance = calculateDistance(i, j, m, centerX, centerY); if (distance < minDistance) { minDistance = distance; bestX = i; bestY = j; } else if (distance == minDistance) { if (i < bestX) { bestX = i; bestY = j; } else if (i == bestX && j < bestY) { bestY = j; } } } } } return {bestX, bestY}; } int main() { int N, K; cin >> N >> K; vector<int> M(N); for (int i = 0; i < N; i++) { cin >> M[i]; } vector<vector<bool>> warehouse(K, vector<bool>(K, false)); int centerX = (K + 1) / 2 - 1; int centerY = (K + 1) / 2 - 1; for (int i = 0; i < N; i++) { vector<int> position = findPosition(warehouse, M[i], centerX, centerY); int x = position[0]; int y = position[1]; if (x == -1) { cout << -1 << endl; } else { for (int j = y; j < y + M[i]; j++) { warehouse[x][j] = true; } cout << x + 1 << " " << y + 1 << " " << y + M[i] << endl; } } return 0; } ``` ### 代码解释: 1. **`calculateDistance` 函数**:该函数用于计算一个小队部署在某一行的某一区间时,所有成员到大盗中心位置的距离总和。 2. **`findPosition` 函数**:该函数用于寻找合适的位置。它遍历仓库的每一行和每一个可能的起始位置,检查是否有连续的空位。如果有,计算距离总和,并更新最小距离和最佳位置。 3. **`main` 函数**:读取输入,初始化仓库,然后依次处理每支小队。对于每支小队,调用 `findPosition` 函数寻找合适的位置。如果找到位置,更新仓库状态并输出结果;否则,输出 -1。 ######[AI问答 | 857点数解答 | 2026-03-29 15:46:32]
- 导出功能优化:解决多次导出、过程异常、失败提示及完成通知问题 (DeepSeek | 1点数解答 | 2025-02-12 17:35:54)189
- Java开发中Elasticsearch索引数据过多的调优与部署全攻略(阿里通义 | 427点数解答 | 2023-11-07 22:33:43)248
- 小核桃侦探赶案发现场时间计算的Python实现(字节豆包 | 455点数解答 | 2026-03-29 15:20:17)3
- 小核桃侦探破案之计算到达案发现场最短时间(字节豆包 | 397点数解答 | 2026-03-29 15:41:03)3
- C++ 实现小核桃侦探赶往案发现场最短时间计算(字节豆包 | 585点数解答 | 2026-03-29 15:41:42)2
- 小核桃侦探赶路问题:计算到达案发现场最短时间的Python实现(字节豆包 | 232点数解答 | 2026-03-29 15:43:16)2
- 小核桃侦探出行时间计算:基于红绿灯规则的最短耗时求解(字节豆包 | 342点数解答 | 2026-03-29 15:47:43)3
- C++ 实现小核桃侦探赶往案发现场时间计算(字节豆包 | 557点数解答 | 2026-03-29 15:48:45)3
- 浙闽“板凳龙”舞龙队 300 秒螺线盘入:位置与速度全揭秘(阿里通义 | 886点数解答 | 2024-09-07 10:31:31)633
- 浙闽“板凳龙”舞龙队 300 秒位置与速度数学模型揭秘(GPT | 565点数解答 | 2024-09-07 10:32:56)529
- 223节板凳龙沿等距螺线盘入:300秒内位置与速度的数学揭秘 (讯飞星火 | 443点数解答 | 2024-09-07 10:34:10)378
- 浙闽“板凳龙”300秒舞龙轨迹与速度:数学模型揭秘!(字节豆包 | 522点数解答 | 2024-09-07 10:35:06)350