四大文化赛道完整展开
06-deliverables/appendix-code.md
民族展演排期:单舞台节目场次最大化 代码附录
站内文件视图直接读取仓库内容,Markdown 使用文档排版渲染,其余文本文件保持原始排版,方便校对训练证据链。
文件类型Markdown
10-cases/s4-jh-05-stage-schedule/06-deliverables/appendix-code.md
- 完整解题档案:complete-solution-dossier.md
Python 主实现
源文件:main.py
- 实现状态:当前已有可执行实现
import sys
def solve(data: str) -> str:
tokens = data.split()
if not tokens:
return ""
it = iter(tokens)
n = int(next(it))
shows = []
for order in range(n):
name = next(it)
start = int(next(it))
end = int(next(it))
shows.append((end, start, order, name))
shows.sort()
selected = []
last_end = -1
for end, start, _, name in shows:
if start >= last_end:
selected.append(name)
last_end = end
line = ",".join(selected) if selected else "NONE"
return f"selected={len(selected)}\nshows={line}"
if __name__ == "__main__":
sys.stdout.write(solve(sys.stdin.read()).strip())
sys.stdout.write("\n")
C++ 对照实现
源文件:main.cpp
- 实现状态:当前已有可执行实现
#include <algorithm>
#include <iostream>
#include <string>
#include <tuple>
#include <vector>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
if (!(cin >> n)) {
return 0;
}
vector<tuple<int, int, int, string>> shows;
for (int order = 0; order < n; ++order) {
string name;
int start, end;
cin >> name >> start >> end;
shows.push_back({end, start, order, name});
}
sort(shows.begin(), shows.end());
vector<string> selected;
int last_end = -1;
for (const auto& show : shows) {
int end = get<0>(show);
int start = get<1>(show);
const string& name = get<3>(show);
if (start >= last_end) {
selected.push_back(name);
last_end = end;
}
}
cout << "selected=" << selected.size() << "\n";
cout << "shows=";
if (selected.empty()) {
cout << "NONE";
} else {
for (size_t i = 0; i < selected.size(); ++i) {
if (i) {
cout << ',';
}
cout << selected[i];
}
}
cout << "\n";
return 0;
}