QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#743364#9528. New Energy Vehiclemumu_sir#WA 10ms58544kbC++142.8kb2024-11-13 19:01:412024-11-13 19:01:41

Judging History

This is the latest submission verdict.

  • [2024-11-13 19:01:41]
  • Judged
  • Verdict: WA
  • Time: 10ms
  • Memory: 58544kb
  • [2024-11-13 19:01:41]
  • Submitted

answer

#include <bits/stdc++.h>
#define int long long
using namespace std;
#define YES "YES"
#define NO "NO"
#define all(a) a.begin(), a.end()
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<int, int> pii;
const double eps = 1e-9;
const int N = 2e6 + 10;
const int M = 2e5 + 10;
const int INF = 1e16 + 100;
const int mod = 998244353;
const int base = 23333;
mt19937 rng(std::chrono::steady_clock::now().time_since_epoch().count());
int mx[N], now[N];
int jl[N], id[N];
vector<int> e[N];
void solve()
{
    int n, m;
    cin >> n >> m;
    vector<int> flag(n + 5);
    for(int i = 1;i <= n;i++)
    {
        cin >> mx[i];
        now[i] = mx[i];
    }
    auto cmp = [&](pii a, pii b)
    {
        return a.first > b.first;
    };
    priority_queue <pii, vector<pii>, decltype(cmp)> q(cmp);
    for(int i = 1;i <= m;i++)
    {
        cin >> jl[i] >> id[i];
        q.push({i, id[i]});
        e[id[i]].push_back(i);
        flag[id[i]]++;
    }
    int pre = 0, sy = 0, ans = 0;
    for(int i = 1;i <= n;i++)
    {
        if(!flag[i]) sy += now[i]; 
    }
    for(int i = 1;i <= m;i++)
    {
        int ned = jl[i] - pre;
        while(!q.empty() && ned > 0)
        {
            auto [u, v] = q.top();
            q.pop();
            if(now[v] < ned)
            {
                ans += now[v];
                ned -= now[v];
                now[v] = 0;
            }
            else
            {
                ans += ned;
                now[v] -= ned;
                ned = 0;
                if(id[i] == v)
                {
                    if(i == e[id[i]].back()) sy += mx[id[i]];
                    else now[id[i]] = mx[id[i]];
                }
                else
                {
                    if(i == e[id[i]].back()) sy += mx[id[i]];
                    else
                    {
                        auto it = upper_bound(all(e[id[i]]), i);
                        now[id[i]] = mx[id[i]];
                        q.push({*it, id[i]});
                    }
                }
                q.push({u, v});
            }
        }
        if(ned > sy)
        {
            ans += sy;
            sy = 0;
            break;
        }
        else if(ned > 0)
        {
            ans += ned;
            sy -= ned;
            auto it = upper_bound(all(e[id[i]]), i);
            if(it == e[id[i]].end()) sy += mx[id[i]];
            else
            {
                now[id[i]] = mx[id[i]];
                q.push({*it, id[i]});
            }
        }
        pre = jl[i];
    }
    ans += sy;
    cout << ans << '\n';
    for(int i = 1;i <= m;i++) e[id[i]].clear();
}
signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int t = 1;
    cin >> t;
    while (t--) solve();
    return 0;
}

详细

Test #1:

score: 100
Accepted
time: 8ms
memory: 58544kb

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: 10ms
memory: 58292kb

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
12
4
12
999999999
2000000000

result:

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