題目連接
- 該題是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;
}