我是靠谱客的博主 顺心花生,最近开发中收集的这篇文章主要介绍luogu-P5661 公交换乘,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目连接

  • 该题是CSP-J2-2019-T2

题目大意

  • 可以选乘公车或者地铁;
  • 乘坐地铁时:一定要买票,但会获得(45分钟内有效)的免费公车券;
  • 乘坐公车时:有券一定用券(而且先用早的券),没券则买票;
  • 问:最小的花费。

题目分析

根据NOIP的惯例,这个T2也应该是签到题,大胆地想模拟。
结果发现,真的是个大模拟,注意细节就好。


参考代码
//CSP-J2-2-公交换乘
//贪心模拟 
#include<bits/stdc++.h>
using namespace std;
int n;
long long ans;
struct nod{
	int w,t;
};
vector<nod>q;

int main(){
	cin>>n;
	int x,w,t;
	while(n--){
		scanf("%d %d %d",&x,&w,&t);
		
		if(x==0){	//坐地铁,一定要买票 
			q.push_back({w,t});
			ans+=w;
		}
		
		while(!q.empty()&&t-q.front().t>45)	//扔掉过期的券
			q.erase(q.begin(),q.begin()+1);	 
			
		if(x==1){	//坐公交
			bool ff=0;
			if(!q.empty()){	
				int len=q.size();
				for(int i=0;i<len;i++){
					if(q[i].w>=w){	//有优惠券,用掉 
						ff=1;
						q.erase(q.begin()+i,q.begin()+i+1);
						break;
					}
				}
			} 
			if(!ff) ans+=w;	//没券,买票 
		}
	}
	
	cout<<ans;
	
	return 0;
} 

最后

以上就是顺心花生为你收集整理的luogu-P5661 公交换乘的全部内容,希望文章能够帮你解决luogu-P5661 公交换乘所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部