编辑
2024-09-15
算法题
00
请注意,本文编写于 236 天前,最后修改于 236 天前,其中某些信息可能已经过时。

今天做https://www.acwing.com/problem/content/description/103/

直接模拟就可以,首先全部初始化高度为最高,对于每对关系,把中间的牛高度-1,可能有重复关系所以要去重

cpp
#include <iostream> #include <algorithm> using namespace std; void max_heights(int n, int p, int h, int m, int relations[][2]) { // 初始化每头牛的身高为 H int heights[n]; fill(heights, heights + n, h); // 记录已经处理过的区间 bool processed_intervals[n][n]; fill(&processed_intervals[0][0], &processed_intervals[0][0] + n * n, false); for (int i = 0; i < m; ++i) { int a = relations[i][0]; int b = relations[i][1]; // 确保 a < b if (a > b) swap(a, b); // 如果这个区间还没有被处理过 if (!processed_intervals[a - 1][b - 1]) { // 在 a 和 b 之间的牛的身高减去 1 for (int j = a; j < b - 1; ++j) { heights[j] -= 1; } // 记录这个区间已经被处理过 processed_intervals[a - 1][b - 1] = true; } } // 输出结果 for (int i = 0; i < n; ++i) { cout << heights[i] << endl; } } int main() { int n, p, h, m; cin >> n >> p >> h >> m; int relations[m][2]; for (int i = 0; i < m; ++i) { cin >> relations[i][0] >> relations[i][1]; } // 计算每头牛的最大可能身高 max_heights(n, p, h, m, relations); return 0; }

本文作者:yowayimono

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!