#include<bits/stdc++.h>
using namespace std;
int dl[2][51],head=51,tail;//创建队列、头和尾。算头不算尾
int a,b,c,d,sum,minn,mixb;//计数器、最小值和最小值的下标
int main(){
cin>>a;
for(int i=0;i<a;i++){
cin>>b>>c>>d;
if(b==0){//地铁
head++;
if(head==100)head=head%100;//循环队列,多50防止循环队列失效,计算时要%50
dl[0][head]=c;//票价
dl[1][head]=d;//时间
sum+=c;//加钱
}
if(b==1){//公交车
minn=99999;//初始化
for(int j=tail+1;j<=head;j++){//开始寻找
if(dl[0][j]<minn&&dl[0][j]>=c){//价格可以
if(dl[1][j]+45>=d){//时间可以
minn=dl[0][j];
mixb=j;
}
else{//TLE
dl[0][j]=-1;//设置一个异常值
}
}
}
if(minn!=99999){//搞得到
dl[0][mixb]=-1;//设置一个异常值
}
else{//搞不到
sum+=c;//加钱
}
while(dl[0][tail]==-1&&tail+1<=head){
tail++;//尾往前走
tail=tail%50;//保证循环队列
}
}
}
cout<<sum;//输出
return 0;
}
在循环中a会莫名其妙变掉