| # | Time | Username | Problem | Language | Result | Execution time | Memory | 
|---|---|---|---|---|---|---|---|
| 123921 | gs14004 | Naan (JOI19_naan) | C++17 | 645 ms | 82616 KiB | 
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2005;
using lint = long long;
using pi = pair<lint, lint>;
int n, m;
int a[MAXN][MAXN];
vector<pi> frac;
vector<int> who;
pi howLeft[MAXN][MAXN];
bool vis[MAXN];
auto cmp = [](pi a, pi b){
	return (__int128)a.first * b.second < (__int128) b.first * a.second;
};
int main(){
	scanf("%d %d",&n,&m);
	for(int i=1; i<=n; i++){
		for(int j=1; j<=m; j++){
			scanf("%d",&a[i][j]);
		}
	}
	for(int i=1; i<=n; i++){
		lint sum = 0;
		for(int j=1; j<=m; j++){
			sum += a[i][j];
		}
		lint curSum = 0;
		howLeft[i][0] = pi(0, 1);
		int ptr = 0;
		for(int j=1; j<n; j++){
			while(curSum + a[i][ptr+1] * n<= sum * j){
				curSum += a[i][++ptr] * n;
			}
			lint tmp = sum * j - curSum;
			auto frac = pi(tmp, a[i][ptr + 1] * n);
			frac.first += 1ll * ptr * n * a[i][ptr + 1];
			howLeft[i][j] = frac;
		}
		howLeft[i][n] = pi(m, 1);
	}
	for(int i=1; i<=n; i++){
		pi minv(m + 1, 1);
		int pos = 1;
		for(int j=1; j<=n; j++){
			if(!vis[j] && cmp(howLeft[j][i], minv)){
				minv = howLeft[j][i];
				pos = j;
			}
		}
		vis[pos] = 1;
		who.push_back(pos);
		if(i < n) frac.push_back(minv);
	}
	for(auto &i : frac) printf("%lld %lld\n", i.first, i.second);
	for(auto &i : who) printf("%d ", i);
}
Compilation message (stderr)
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
