Submission #378054

#TimeUsernameProblemLanguageResultExecution timeMemory
378054pit4hNaan (JOI19_naan)C++14
29 / 100
36 ms8428 KiB
#include<bits/stdc++.h>
#define st first
#define nd second
#define mp make_pair
using namespace std;
using ll = long long;
using ld = long double;
const int MAXN = 2e3+1;
const ll inf = 1e9, INF = 1e12;
int n, l, v[MAXN][MAXN], pref[MAXN][MAXN];

ll round(ll p, ll q) {
	ll res = (ld)p/q * inf;
	return res;
}

ll calc(ll start, int it) {
	int st = start / inf;
	int lo = st, hi = l-1, res=st;
	ll beg = v[it][st] * ((st+1)*inf - start);
	//cerr<<"  "<<beg.p<<' '<<beg.q<<'\n';
	ll score = 0, lim = round(pref[it][l], n); 
	while(lo <= hi) {
		int mid = (lo+hi)/2;
		ll cur_score = beg + (pref[it][mid] - pref[it][st]) * inf;
		//cerr<<"  "<<mid<<": "<<cur_score.p<<' '<<cur_score.q<<'\n';
		if(cur_score <= lim) {
			//cerr<<".\n";
			score = cur_score;
			res = mid + 1;
			lo = mid+1;
		}
		else {
			hi = mid-1;
		}
	}
	//cerr<<"  "<<st<<' '<<res<<' '<<score.p<<' '<<score.q<<'\n';
	ll ret;
	if(res>st) {
		ret = res * inf + round((round(pref[it][l], n) - score), v[it][res] * inf);
	}
	else {
		ret = start + round((round(pref[it][l], n) - score), v[it][res] * inf);
	}
	return ret;
}
int main() {
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	cin>>n>>l;
	for(int i=1; i<=n; ++i) {
		for(int j=1; j<=l; ++j) {
			cin>>v[i][j];
			pref[i][j] = pref[i][j-1] + v[i][j];
		}
	}
	vector<int> people;
	for(int i=1; i<=n; ++i) people.push_back(i);

	ll start = inf;
	vector<int> perm;
	vector<ll> X;
	for(int iter=1; iter<=n; ++iter) {
		int& best = people[0];
		ll bestv;
		//cerr<<"iter: "<<iter<<'\n';
		for(int& i: people) {
			//cerr<<i<<'\n';
			ll curv = calc(start, i);
			//cerr<<' '<<curv.p<<' '<<curv.q<<'\n';
			if(i==people[0] || curv < bestv) {
				swap(best, i);
				bestv = curv;
			}
		}
		perm.push_back(best);

		start = bestv;
		best = people.back();
		people.pop_back();
		
		if(iter < n) X.push_back(start);
	}

	for(auto& i: X) {
		i = i - inf;
		cout<<i<<' '<<inf<<'\n';	
	}
	for(auto i: perm) {
		cout<<i<<' ';
	}
	cout<<'\n';
}

Compilation message (stderr)

naan.cpp: In function 'int main()':
naan.cpp:70:20: warning: 'bestv' may be used uninitialized in this function [-Wmaybe-uninitialized]
   70 |    if(i==people[0] || curv < bestv) {
      |       ~~~~~~~~~~~~~^~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...