Submission #532536

#TimeUsernameProblemLanguageResultExecution timeMemory
5325368e7Naan (JOI19_naan)C++17
29 / 100
161 ms63876 KiB
//Challenge: Accepted
#include <bits/stdc++.h>
using namespace std;
#ifdef zisk
void debug(){cout << endl;}
template<class T, class ... U> void debug(T a, U ... b){cout << a << " ", debug(b...);}
template<class T> void pary(T l, T r) {
	while (l != r) cout << *l << " ", l++;
	cout << endl;
}
#else
#define debug(...) 0
#define pary(...) 0
#endif
#define ll long long
#define maxn 2005
#define pii pair<ll, ll>
#define ff first
#define ss second
#define io ios_base::sync_with_stdio(0);cin.tie(0);
const ll inf = 1<<30;
ll a[maxn][maxn];
pii b[maxn][maxn];
bool vis[maxn];
int main() {
	io
	int n, l;
	cin >> n >> l;
	for (int i = 0;i < n;i++) {
		ll tot = 0;
		for (int j = 0;j < l;j++) {
			cin >> a[i][j];
			tot += a[i][j];
			a[i][j] *= n;
		}
		ll cur = 0, ind = 0;
		for (int j = 1;j <= n;j++) {
			while (ind < l && cur + a[i][ind] <= tot*j) {
				cur += a[i][ind];
				ind++;
			}
			if (ind == l) b[i][j] = {l, 1};
			else b[i][j] = {(tot * j - cur) + ind*a[i][ind], a[i][ind]};
		}
	}
	auto cmp = [&] (pii x, pii y){return x.ff * y.ss < x.ss * y.ff;};
	vector<int> ans;
	vector<pii> frac;
	for (int i = 1;i <= n;i++) {
		pii best = {inf, 1};
		int bind = 0;
		for (int j = 0;j < n;j++) {
			if (!vis[j] && !cmp(best, b[j][i])) {
				best = b[j][i];
				bind = j;
			}
		}
		ans.push_back(bind+1);
		vis[bind] = 1;
		frac.push_back(best);
	}
	frac.pop_back();
	for (auto i:frac) cout << i.ff << " " << i.ss << "\n";
	for (int i:ans) cout << i << " ";
	cout << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...