编写其源程序并分析解题思路和时间复杂度
时间: 2023-08-12 10:22:30 浏览: 83
以下是 P1047 校门外的树 的 C++ 源代码:
```cpp
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 10010;
int a[maxn];
int main() {
int l, m;
cin >> l >> m;
for (int i = 0; i < m; i++) {
cin >> a[i];
}
sort(a, a + m);
int ans = a[0];
for (int i = 1; i < m; i++) {
if (a[i] - a[i - 1] - 1 > 0) {
ans += a[i] - a[i - 1] - 1;
}
}
ans += l - a[m - 1] - 1;
cout << ans << endl;
return 0;
}
```
解题思路:
题目要求计算一段道路上没有被树覆盖的长度,需要将树的位置记录在一个数组中,对数组进行排序,从而得到每两棵相邻树之间的空隙长度,将这些空隙长度累加起来即可得到未被覆盖的长度。如果第一棵树的位置不是0,则需要在0和第一棵树之间再计算一段长度。
时间复杂度:
该算法的时间复杂度为 O(mlogm),其中 m 表示树的数量。这是因为需要对树的位置进行排序,排序的时间复杂度为 O(mlogm),计算未被覆盖的长度的时间复杂度为 O(m),因此总的时间复杂度为 O(mlogm)。
阅读全文