这题交互是不是挂了,一直RE
查看原帖
这题交互是不是挂了,一直RE
383782
StarPatrick楼主2024/9/12 20:28

LOJ AC

#include <bits/stdc++.h>
#include <vector>
//#include "tickets.h"
extern "C" void allocate_tickets(std::vector<std::vector<int> > s);
using namespace std;
#define ll long long
int L[1505], R[1505], id[1505];
struct e{
	int i;
	ll u;
};
extern "C" bool operator <(e x, e y) {
	return x.u<y.u;
}
extern "C" bool cmp(int x, int y) {
	return L[x]>L[y];
}
extern "C" long long find_maximum(int K, std::vector<std::vector<int> > a) {
	vector<vector<int> > print = a;
	int n = a.size(), m = a[0].size();
	ll sum = 0;
	priority_queue<e> q; 
	for (int p=0;p<n;p++) {
		L[p] = K-1;
		R[p] = m;
		for (int k=0;k<K;k++) {
			sum-=a[p][k];
		}
		for (int k=0;k<m;k++) {
			print[p][k] = -1;
		}
		q.push({p, a[p][R[p]-1]+a[p][L[p]]}); 
	}
	for (int zqw=1;zqw<=n*K/2;zqw++) {
		e t = q.top();
		q.pop();
		L[t.i]--, R[t.i]--;
		sum+=t.u; 
		if (R[t.i]&&L[t.i]>=0) q.push({t.i, a[t.i][R[t.i]-1]+a[t.i][L[t.i]]});
	}
	for (int p=1;p<=n;p++) {
		id[p] = p-1;
	}
	for (int p=0;p<K;p++) {
		stable_sort(id+1, id+n+1, cmp);
		for (int k=1;k<=n/2;k++) {
			print[id[k]][L[id[k]]] = p;
			L[id[k]]--;
		}
		for (int k=n/2+1;k<=n;k++) {
			print[id[k]][R[id[k]]] = p;
			R[id[k]]++;
		}
	}
	allocate_tickets(print);
	return sum;
}
/*
int main() {
	vector<vector<int> > d;
	vector<int> k;
	k.push_back(0);
	k.push_back(2);
	k.push_back(5);
	d.push_back(k);
	k.clear();
	k.push_back(1);
	k.push_back(1);
	k.push_back(3);
	d.push_back(k);
	find_maximum(2, d);
	return 0;
}
*/
2024/9/12 20:28
加载中...