第一次代码:
#include<cstdio>
#include<queue>
using namespace std;
queue<int> q;
struct node
{
int flag;
int p,t;
};
node a;
int main()
{
int n;
int ans=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int s;
scanf("%d%d%d",&a.flag,&a.p,&a.t);
if(a.flag==0)
{
q.push(a.t);
s=a.p;
ans+=a.p;
}
if(a.flag==1)
{
if(!q.empty()&&a.p<=s&&a.t-q.front()>45)
while(!q.empty()&&a.t-q.front()>45)
q.pop();
if(!q.empty()&&a.t-q.front()<=45&&a.p<=s)
{
q.pop();
continue;
}
else
ans+=a.p;
}
}
printf("%d",ans);
return 0;
}
过了第一个样例,但只得了30分。
后来发现要判断金钱大小不能用最新的地铁票判断
就加了个数组判断
但是抱铃了。。。
第二次代码
#include<cstdio>
#include<queue>
using namespace std;
queue<int> q;
int s[100005];
struct node
{
int flag;
int p,t;
};
node a;
int main()
{
int n;
int ans=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int ii=1,iii=ii;//ii改变金钱所在数组下标,iii访问数组下标(所以pop后iii++)
scanf("%d%d%d",&a.flag,&a.p,&a.t);
if(a.flag==0)
{
q.push(a.t);
s[ii]=a.p;
ans+=a.p;
ii++;
}
if(a.flag==1)
{
if(!q.empty()&&a.p<=s[iii]&&a.t-q.front()>45)
while(!q.empty()&&a.t-q.front()>45)
{
q.pop();
iii++;
}
if(!q.empty()&&a.t-q.front()<=45&&a.p<=s[iii])
{
q.pop();
iii++;
continue;
}
else
ans+=a.p;
}
}
printf("%d",ans);
return 0;
}