今天做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 许可协议。转载请注明出处!