先30分,后抱铃求助
查看原帖
先30分,后抱铃求助
252583
endorphin250楼主2020/10/10 21:55

第一次代码:

#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;
}
2020/10/10 21:55
加载中...