洛谷 P5661 公交换乘 & [NOIP2019普及组] (模拟)
传送门
解题思路
先把所有的数据读下来。
对于地铁,答案直接加,然后把编号放入一个数组a内。
对于公交车,从前往后枚举a数组,然后找到出现最早的且符合价钱大于等于公交车的价钱,然后把这个数删除(变为0)。
然后再考虑有效期是45分钟,为了优化时间,我们可以每一次把数组看做一个队列,当a[first]是0或者时间超过了45分钟时,first++。
这样就保证了数组内的数不超过45个。
最后看一眼时间复杂度,O(NK),K为不超过45。
轻松A掉。
AC代码
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 const int maxn=100005; 5 int n,x,p[maxn],t[maxn],a[maxn],cnt,fir=1; 6 long long ans; 7 int main() 8 { 9 cin>>n; 10 for(int i=1;i<=n;i++){ 11 scanf("%d%d%d",&x,&p[i],&t[i]); 12 while(fir<=cnt&&(a[fir]==0||t[i]-t[a[fir]]>45)) fir++; 13 ans+=p[i]; 14 if(x==0){ 15 a[++cnt]=i; 16 }else{ 17 for(int j=fir;j<=cnt;j++){ 18 if(a[j]==0) continue; 19 if(p[i]<=p[a[j]]){ 20 a[j]=0; 21 ans-=p[i]; 22 break; 23 } 24 } 25 } 26 } 27 cout<<ans<<endl; 28 return 0; 29 }
//CSP2019普及组 t2
作者:尹昱钦
欢迎任何形式的转载,但请务必注明出处。
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现