QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#683496#9528. New Energy VehiclezishengWA 15ms72160kbC++203.0kb2024-10-27 21:28:532024-10-27 21:28:54

Judging History

This is the latest submission verdict.

  • [2024-10-27 21:28:54]
  • Judged
  • Verdict: WA
  • Time: 15ms
  • Memory: 72160kb
  • [2024-10-27 21:28:53]
  • Submitted

answer

#include<bits/stdc++.h>
#define For(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
typedef long long ll;
const int N=1e5+10;

struct node
{
    ll num,len;
};

ll a[N];
ll ora[N];
deque<node> q;
queue<node> f;
queue<int> que[N];

void solve()
{
    int i,j,n,m;
    cin>>n>>m;
    q.clear();
    while(!f.empty())
        f.pop();
    For(i,1,n)
        while(!que[i].empty())
            que[i].pop();

    For(i,1,n)
        cin>>a[i],ora[i]=a[i];

    For(i,1,m)
    {
        node x;
        cin>>x.len>>x.num;
        q.push_back(x);
        f.push(x);
        que[x.num].push(x.len);
    }

    ll sum=0;
    For(i,1,n)
    {
        if(que[i].empty())
        {
            sum+=a[i];
        }
    }
    ll ans=0;

    while(!f.empty()){
        if(!q.empty()){
            node x=q.front();
            while(ans+a[x.num] < f.front().len){
                ans+=a[x.num],a[x.num]=0,q.pop_front();
                if(q.empty()) break;;
                x=q.front();
            }
            if(!q.empty()){
                a[x.num]-=f.front().len-ans;
                ans=f.front().len;
                a[f.front().num]=ora[f.front().num];
                que[f.front().num].pop();
                if(que[f.front().num].empty()) sum+=a[f.front().num];
                else if(que[f.front().num].front()<q.front().len)
                      q.push_front(node{f.front().num,que[f.front().num].front()});
                f.pop();
            }
            else
            {
                if(ans+sum < f.front().len)
                {
                    ans+=sum;
                    sum=0;
                    break;
                }
                else
                {
                    sum-=f.front().len-ans;
                    ans=f.front().len;
                    a[f.front().num]=ora[f.front().num];
                    que[f.front().num].pop();
                    if(que[f.front().num].empty()) sum+=a[f.front().num];
                    else if(que[f.front().num].front()<q.front().len)
                          q.push_front(node{f.front().num,que[f.front().num].front()});
                    f.pop();
                }
            }
        }
        else
        {
                if(ans+sum < f.front().len)
                {
                    ans+=sum;
                    sum=0;
                    break;
                }
                else
                {
                    sum-=f.front().len-ans;
                    ans=f.front().len;
                    a[f.front().num]=ora[f.front().num];
                    que[f.front().num].pop();
                    q.push_front(node{f.front().num,que[f.front().num].front()});
                    f.pop();
                }
        }
    }

    if(f.empty())
        ans+=sum;

    cout<<ans<<'\n';
    return;
}

signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    int t=1;
    cin>>t;
    while(t--)
        solve();
    return 0;
}


詳細信息

Test #1:

score: 100
Accepted
time: 13ms
memory: 71268kb

input:

2
3 1
3 3 3
8 1
2 2
5 2
1 2
2 1

output:

12
9

result:

ok 2 lines

Test #2:

score: -100
Wrong Answer
time: 15ms
memory: 72160kb

input:

6
3 2
2 2 2
6 1
7 1
2 2
3 3
2 1
6 2
2 3
2 2
5 1
7 2
9 1
2 2
3 3
2 1
6 2
1 1
999999999
1000000000 1
1 1
1000000000
1000000000 1

output:

6
12
4
12
999999999
2000000000

result:

wrong answer 1st lines differ - expected: '9', found: '6'