Submission #631133

#TimeUsernameProblemLanguageResultExecution timeMemory
631133oliversommerCatfish Farm (IOI22_fish)C++17
6 / 100
104 ms24928 KiB
#include "fish.h"

#include <assert.h>

#include <algorithm>
#include <numeric>
#include <vector>

using namespace std;

struct Fish {
	int x, y, weight;
	bool operator<(const Fish& a) const {
		return y < a.y;	 // x == a.x ? y < a.y : x < a.x;
	}
};

long long max_weights(int N, int M, vector<int> X, vector<int> Y, vector<int> W) {
	vector<Fish> all_fish(M);
	for (int i = 0; i < M; ++i) {
		all_fish[i] = {X[i], Y[i], W[i]};
	}
	// sort(all_fish.begin(), all_fish.end());

	vector<long long> pref_sum0(N + 1), pref_sum1(N + 1);
	int pivot = 0;
	for (int i = 0; i < M; ++i) {
		Fish& a = all_fish[i];
		assert(a.x == 0 || a.x == 1);
		if (a.x == 0) {
			pref_sum0[a.y + 1] = a.weight;
		} else {
			pref_sum1[a.y + 1] = a.weight;
		}
	}

	// prefix sum
	for (int i = 1; i <= N; ++i) {
		pref_sum0[i] += pref_sum0[i - 1];
		pref_sum1[i] += pref_sum1[i - 1];
	}
	
	if(N == 2) {
		return max(pref_sum0[N], pref_sum1[N]);
	}

	// find pivot
	for (int i = 0; i <= N; ++i) {
		if (pref_sum0[i] + pref_sum1[N] - pref_sum1[i] > pref_sum0[pivot] + pref_sum1[N] - pref_sum1[pivot]) {
			pivot = i;
		}
	}

	return pref_sum0[pivot] + pref_sum1[N] - pref_sum1[pivot];
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...