QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#789840#9528. New Energy Vehicledin2009siucWA 0ms3836kbC++202.0kb2024-11-27 22:12:512024-11-27 22:12:53

Judging History

This is the latest submission verdict.

  • [2024-11-27 22:12:53]
  • Judged
  • Verdict: WA
  • Time: 0ms
  • Memory: 3836kb
  • [2024-11-27 22:12:51]
  • Submitted

answer

#include <bits/stdc++.h>

#define int long long
#define pii pair<int,int>
#define vi vector<int>
#define vvi vector<vector<int>>
#define uset unordered_set
#define umap unordered_map
#define print(...) (cout<<format(__VA_ARGS__));
#define MOD 1000000007
#define mod(a) ((a+MOD)%MOD)
using namespace std;

// #define ordered_set tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>
// using namespace __gnu_pbds;

signed main() {
    cin.tie(nullptr)->sync_with_stdio(false);
    int T;
    cin >> T;
    while ( T-- ) {
        int n, m;
        cin >> n >> m;
        vector<int> bat(n);
        for ( int& a: bat ) cin >> a;
        vector<int> bat_full(bat);
        vector<int> t(m);
        vector<int> x(m);
        for ( int i=0; i<m; i++ ) {
            cin >> x[i] >> t[i];
            t[i]--;
        }
        for ( int i=0; i<n; i++ ) {
            t.push_back(i);
            x.push_back(1e16);
        }
        m += n;
        
        vector<queue<int>> vq(n);
        for ( int i=0; i<m; i++ ) vq[t[i]].push(i);
        
        set<int> s;
        for ( int i=0; i<n; i++ ) {
            if ( !vq[i].empty() ) s.insert(vq[i].front());
        }
        
        // cout << "begin: " <<  t[*s.begin()] << '\n';
        int prev = 0;
        for ( int j=0; j<m; j++ ) {
            while ( !s.empty() && prev + bat[ t[*s.begin()] ] <= x[j] ) {
                int idx = t[*s.begin()];
                prev += bat[idx];
                bat[idx] = 0;
                s.erase(s.begin());
            }
            if ( s.empty() ) break;
            int idx = t[*s.begin()];
            // cout << idx << '\n';
            bat[idx] -= x[j] - prev;
            prev = x[j];
            bat[t[j]] = bat_full[t[j]];
            
            s.erase(vq[t[j]].front());
            vq[t[j]].pop();
            s.insert(vq[t[j]].front());
        }
        cout << prev << '\n';
    }
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

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: 0ms
memory: 3636kb

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
11
4
11
999999999
1000000000

result:

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