QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#726473#9528. New Energy VehicleExile_CodeWA 0ms3552kbC++202.1kb2024-11-09 01:16:072024-11-09 01:16:07

Judging History

This is the latest submission verdict.

  • [2024-11-09 01:16:07]
  • Judged
  • Verdict: WA
  • Time: 0ms
  • Memory: 3552kb
  • [2024-11-09 01:16:07]
  • Submitted

answer

#define  _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
#include <vector>
#include <set>
#include <map>
#include <cstdio>
#include <cstring>
#include <queue>
#include <cstdlib>
#include <algorithm>
#include <list>
#include <string>
#include <cmath>
#include <bitset>
#include <stack>
#include <math.h>
#include <functional>
#include <unordered_map>
#include <unordered_set>
#include <numeric>
#include <cstdint>
#include <iomanip>

using namespace std;

#define int ll
#define ll long long 
#define pii pair<int,int>
#define endl '\n'
#define vv vector
#define all(x) x.begin()+1,x.end()
#define	cy cout<<"Yes"<<endl
#define cn cout<<"No"<<endl;




#define ft first
#define sd second
map<int, vv<int>>mp;

struct nd {
	
	int v, id;

	bool operator<(const nd b)const {
		return mp[id].back() > mp[b.id].back();
	}

};

void solve() {

	int n, m; cin >> n >> m;

	mp.clear();
	vv<int>dian(n + 1);
	for (int i = 1; i <= n; i++) {
		cin >> dian[i];
	
	}


	vv<pii>pos(m + 1);
	for (int i = 1; i <= m; i++) {
		int x, p; cin >> x >> p;
		mp[p].push_back(x);
		pos[i] = { x,p };
	}
	for(int i=1;i<=n;i++)
		mp[i].push_back(1e9 + 10);

	for (auto &a : mp) {
		reverse(a.second.begin(), a.second.end());
	}

	priority_queue<nd, vv<nd>>q;
	for (int i = 1; i <= n; i++) {
		q.push({ dian[i],i });
	}

	int sum = 0;
	pos[0] = { 0,0 };
	vv<int>use = dian;
	for (int i = 1; i <= m; i++) {
		int dx = pos[i].first - pos[i - 1].first;
		while (q.size()&&dx) {
			auto now = q.top(); q.pop();
			if (now.v != use[now.id])
				continue;
			if (now.v > dx) {
				use[now.id] -= dx;
				sum += dx;
				q.push({ use[now.id],now.id });
				dx = 0;
				break;
			}
			else {
				use[now.id] = 0;
				dx -= now.v;
				sum += now.v;
			}
		}
		if (dx) 
			break;
		use[pos[i].second] = dian[pos[i].second];
		q.push({ dian[pos[i].second],pos[i].second });
	}
	
	for (int i = 1; i <= n; i++)
		sum += use[i];

	cout << sum << endl;

}
signed main() {

	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);



	ll _ = 1;
	cin >> _;

	while (_--)
		solve();


	return 0;
}



Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Wrong Answer
time: 0ms
memory: 3552kb

input:

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

output:

12
8

result:

wrong answer 2nd lines differ - expected: '9', found: '8'