10 条题解
-
1
(Ds-V3的答案)
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int l,m; cin>>l>>m; vector<pair<int,int>> intervals(m); for(int i=0;i<m;i++){ cin>>intervals[i].first>>intervals[i].second; } sort(intervals.begin(), intervals.end()); vector<pair<int, int>> merged; for (const auto& interval : intervals) { if (merged.empty() || interval.first > merged.back().second) { merged.push_back(interval); } else { merged.back().second = max(merged.back().second, interval.second); } } int removed = 0; for (const auto& interval : merged) { removed += interval.second - interval.first + 1; } int remaining = l + 1 - removed; cout<<remaining<<endl; return 0; }代码解释:
1.输入处理 :读取马路的长度 l 和区域数目 m,然后读取 m 个区间。 2.区间排序 :将所有区间按照起始点进行排序,以便后续合并。 3.区间合并 :遍历排序后的区间,合并重叠或相邻的区间。合并后的区间存储在 merged 向量中。 4.计算移除的树木数量 :遍历合并后的区间,计算每个区间内的树木数量(end - start + 1),并累加得到 总共移除的树木数量 removed。 5.计算剩余树木数量 :马路上原本有 l + 1 棵树(包括0和l的位置),减去移除的树木数量,得到剩余的树 木数量 remaining。 6.输出结果 :打印剩余的树木数量。
信息
- ID
- 5105
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 1
- 标签
- 递交数
- 584
- 已通过
- 310
- 上传者