Submission #1250079

#TimeUsernameProblemLanguageResultExecution timeMemory
1250079ZicrusTriple Peaks (IOI25_triples)C++20
7.71 / 100
15 ms4168 KiB
#include <bits/stdc++.h>
#include "triples.h"
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pll;
#define all(v) v.begin(), v.end()
constexpr ll inf = 1ll << 62ll;
mt19937 mt(time(0));
ll _ = 0;

ll count_triples(vector<int> h) {
	return 0;
}

vector<int> construct_range(int M, int K) {
	ll n = M;
	vector<vector<int>> patterns = {
		{2},
		{1, 1, 2},
		{2, 3, 4, 1, 2, 1, 3},
		{1, 1, 2, 3, 4, 1, 2, 1, 3},
		{1, 1, 3, 2, 3, 4, 1, 2, 1, 3}
	};
	vector<int> cnts = {0, 1, 8, 11, 13};

	vector<ll> dp(n+1);
	vector<ll> pat(n+1);
	dp[patterns[0].size()] = cnts[0];
	for (ll i = patterns[0].size() + 1; i <= n; i++) {
		for (ll j = 0; j < patterns.size(); j++) {
			if (patterns[j].size() > i) continue;
			ll val = dp[i - patterns[j].size()] + cnts[j];
			if (val > dp[i]) {
				dp[i] = val;
				pat[i] = j;
			}
		}
	}

	vector<int> res(n);
	ll sz = n;
	while (sz > 0) {
		vector<int> p = patterns[pat[sz]];
		for (ll i = p.size()-1; i >= 0; i--) {
			res[sz-1] = p[i];
			sz--;
		}
	}
	return res;
}

#ifdef TEST
#include "grader.cpp"
#endif
#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...
#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...