P5661 [CSP-J2019] 公交换乘 题解
#include<bits/stdc++.h>
using namespace std;
struct subway
{
bool bs;
int price;
int time;
}sb[114514];
struct ticket
{
int latest;
bool used;
int price;
}tic[114514];
int head=0,tail=0,ntime;
bool isf;
int main()
{
int n,sum=0;
cin >> n;
for(int i=0;i<n;i++)
{
cin >> sb[i].bs >> sb[i].price >> sb[i].time;
}
for(int i=0;i<n;i++)
{
ntime=sb[i].time;
if(sb[i].bs==false)
{
sum+=sb[i].price;
tic[head].price=sb[i].price;
tail++;
tic[head].used=false;
tic[head].latest=ntime+45;
}
else
{
while(head < tail && (tic[head].latest <= ntime|| tic[head].used==true))
{
head++;
}
isf=false;
for(int j=head;j<=tail;j++)
{
if(tic[j].price>=sb[i].price)
{
tic[j].used=true;
isf=true;
break;
}
}
if(isf==false)
{
sum+=sb[i].price;
//cout << 1;
}
}
}
cout << sum;
}