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;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章