我是靠谱客的博主 俊秀小鸽子,最近开发中收集的这篇文章主要介绍CSP-J2019真题——公交换乘,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

话不多说,先求拉票
博客之星的评选,谢谢!


在这里插入图片描述
这个题很nice的。
在这里插入图片描述

//Author:PanDaoxi
#include <iostream>
using namespace std;
struct ticket{
	int x,y;
}p[1000001];
int main(){
	int n,a,b,c,f1,f2,sum,t;
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a>>b>>c;
		if(a==0){ //地铁 
			p[f1].x=b; //记录 
			p[f1].y=c;
			f1++;
			sum+=b; //加钱 
		}
		else{ //公交 
			f2=0;
			for(int j=t;j<f1;j++){
				if(c-p[j].y<=45&&b<=p[j].x){ //不超过地铁 
					p[j].x=-1;
					f2=1;
					break;
				}
				else if(c-p[j].y>45){ //时间超出 
					t=j+1; 
				}
			}
			if(!f2) sum+=b; 
		}
	}
	cout<<sum<<endl;
	return 0;
} 

我很无语,系统刷题的时候再刷到,再写。

//Author:PanDaoxi
#include <iostream>
using namespace std;
struct piao{
	int p,t;
	bool u;
	// 增票价格、最晚时间、是否用过
} q[10000001]; // 赠的票
int main(){
	int h,t,n,m;
	h=t=m=0;
	cin>>n;
	for(int i=0;i<n;i++){
		int types,price,time;
		cin>>types>>price>>time;
		if(types==0){
			// 地铁
			m+=price;
			q[t++].t=time+45;
			q[t-1].p=price;
		}
		else{
			// 抛弃过期的
			while(h<t&&q[h].t<time){
				h++;
			}
			bool find=false; // 假设没有合适的票
			for(int j=h;j<t;j++){
				if(q[j].p>=price&&!q[j].u){
					find=true;
					q[j].u=true;
					break;
				}
			}
			// 没票了,买吧
			if(!find) m+=price;
		}
	}
	cout<<m;
	return 0;
}

最后

以上就是俊秀小鸽子为你收集整理的CSP-J2019真题——公交换乘的全部内容,希望文章能够帮你解决CSP-J2019真题——公交换乘所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部