| Run ID | 作者 | 问题 | 语言 | 测评结果 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|
| 90977 | sh25_shenpy | 观光公交(Day 2) | C++ | 通过 | 102 MS | 352 KB | 1344 | 2026-06-12 14:51:57 |
#include<bits/stdc++.h> using namespace std; int N,M,K; struct passenger { int start,end; }pas[100005]; struct station { int off,latest,arrive; }sta[1005]; int Dist[1005]; int main() { scanf("%d%d%d",&N,&M,&K); for(register int i=1;i<N;++i) scanf("%d",&Dist[i]); int t; for(register int i=1;i<=M;++i) { scanf("%d%d%d",&pas[i].start,&t,&pas[i].end); sta[t].latest=max(sta[t].latest,pas[i].start); sta[pas[i].end].off++; } int time=0; for(register int i=1;i<=N;++i) { sta[i].arrive=time; time=max(time,sta[i].latest); time+=Dist[i]; } int max_num,max_pos,tmp_num; while(K--) { max_num=0; for(register int i=2;i<=N;++i) { if(!Dist[i-1]) continue; tmp_num=0; for(register int j=i;j<=N;++j) { tmp_num+=sta[j].off; if(sta[j].arrive<=sta[j].latest) break; } if(tmp_num>max_num) { max_num=tmp_num; max_pos=i; } } Dist[max_pos-1]--; for(register int i=max_pos;i<=N;++i) { sta[i].arrive--; if(sta[i].arrive<sta[i].latest) break; } } int ans=0; for(register int i=1;i<=M;++i) ans+=sta[pas[i].end].arrive-pas[i].start; printf("%d",ans); return 0; }