QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#726471#9528. New Energy VehicleExile_CodeWA 0ms3620kbC++202.1kb2024-11-09 01:13:202024-11-09 01:13:21

Judging History

This is the latest submission verdict.

  • [2024-11-09 01:13:21]
  • Judged
  • Verdict: WA
  • Time: 0ms
  • Memory: 3620kb
  • [2024-11-09 01:13:20]
  • 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];
	}
	
	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;
}



详细

Test #1:

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

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: 3620kb

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:

8
8
4
8
999999999
2000000000

result:

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