QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#697586#9528. New Energy VehicleSocialPandaWA 2ms9788kbC++232.0kb2024-11-01 14:59:382024-11-01 14:59:39

Judging History

This is the latest submission verdict.

  • [2024-11-01 14:59:39]
  • Judged
  • Verdict: WA
  • Time: 2ms
  • Memory: 9788kb
  • [2024-11-01 14:59:38]
  • Submitted

answer

#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")

#include <bits/stdc++.h>
#define int long long
//#define LL long long
#define double long double
//#define lf Lf
#define fi first
#define se second
#define pb push_back
#define eb emplace_back
#define endl "\n"
#define PII pair<int,int>
#define Gheap priority_queue<int,vector<int>,greater<int>>
#define Lheap priority_queue<int>
#define MAXN 0x3f3f3f3f
#define MINN -0x3f3f3f3f
using namespace std;
const int N=2e5+100,M=2*N;
//int e[N],w[M],h[M],ne[M],idx;
vector<int> vec[N];
int a[N];//各型号电池的容量
int v[N];//a的固定值
int p[N];//电站的位置
int t[N];//电站能充哪个型号电池
int idx=0,ans=0;

int dis(int sn)
{
    while(vec[sn].size() and ans>=vec[sn].back())
    {
        vec[sn].pop_back();
    }
    if(vec[sn].empty()) return 1e18;
    else return vec[sn].back();
}

void solve()
{
    int n,m;
    cin>>n>>m;

    priority_queue<PII,vector<PII>,greater<PII>> q;
    for(int i=1;i<=n;i++) {cin>>a[i];v[i]=a[i];vec[i].clear();}
    for(int i=1;i<=m;i++) {cin>>p[i]>>t[i];}
    for(int i=1;i<=m;i++) vec[t[i]].eb(p[i]);
    for(int i=1;i<=n;i++) reverse(vec[i].begin(),vec[i].end());
    for(int i=1;i<=n;i++) q.push({dis(i),i});

    while(q.size())
    {
        int sn = q.top().se;q.pop();

        int ned_go=1e18;
        if(idx<m) ned_go=p[idx+1]-ans;
        int act_go=min(a[sn],ned_go);
        a[sn]-=act_go;
        ans+=act_go;

        if(idx<m and ans==p[idx+1])
        {
            idx++;
            int old = a[t[idx]];
            a[t[idx]] = v[t[idx]];
            q.push({dis(sn),sn});
            if(old==0) q.push({dis(t[idx]),idx});
        }

    }

    cout<<ans<<endl;

}
/*
1 2
3 3

0 1 2 3 4 5 6 7 8 9 10
    1       2
1 1 2 2 2 1 2 2 2 1 1


1 2
5 2

0 1 2 3 4 5 6 7 8 9
  2 1

*/
signed main()
{
    std::ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int tt=1;
    cin >> tt;
    while(tt--) solve();
}

詳細信息

Test #1:

score: 100
Accepted
time: 0ms
memory: 9788kb

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: 2ms
memory: 7912kb

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:

9
15
13
19
1000000018
2000000018

result:

wrong answer 2nd lines differ - expected: '11', found: '15'