四大文化赛道完整展开
06-deliverables/appendix-code.md
红色宣讲波次:广播时段覆盖统计 代码附录
站内文件视图直接读取仓库内容,Markdown 使用文档排版渲染,其余文本文件保持原始排版,方便校对训练证据链。
文件类型Markdown
10-cases/s2-jh-07-broadcast-wave/06-deliverables/appendix-code.md
- 完整解题档案:complete-solution-dossier.md
Python 主实现
源文件:main.py
- 实现状态:当前已有可执行实现
import sys
def solve(data: str) -> str:
tokens = list(map(int, data.split()))
if not tokens:
return ""
it = iter(tokens)
n = next(it)
timeline = next(it)
diff = [0] * (timeline + 3)
for _ in range(n):
left = next(it)
right = next(it)
diff[left] += 1
diff[right + 1] -= 1
active = 0
covered = 0
peak = -1
first_peak = 0
for minute in range(timeline + 1):
active += diff[minute]
if active > 0:
covered += 1
if active > peak:
peak = active
first_peak = minute
return "\n".join(
[
f"covered={covered}",
f"peak={peak}",
f"first_peak={first_peak}",
]
)
if __name__ == "__main__":
sys.stdout.write(solve(sys.stdin.read()).strip())
sys.stdout.write("\n")
C++ 对照实现
源文件:main.cpp
- 实现状态:当前已有可执行实现
#include <iostream>
#include <vector>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, timeline;
if (!(cin >> n >> timeline)) {
return 0;
}
vector<long long> diff(timeline + 3, 0);
for (int i = 0; i < n; ++i) {
int left, right;
cin >> left >> right;
++diff[left];
--diff[right + 1];
}
long long active = 0;
long long covered = 0;
long long peak = -1;
int first_peak = 0;
for (int minute = 0; minute <= timeline; ++minute) {
active += diff[minute];
if (active > 0) {
++covered;
}
if (active > peak) {
peak = active;
first_peak = minute;
}
}
cout << "covered=" << covered << "\n";
cout << "peak=" << peak << "\n";
cout << "first_peak=" << first_peak << "\n";
return 0;
}