제출 #1169535

#제출 시각아이디문제언어결과실행 시간메모리
1169535Troll321Diversity (CEOI21_diversity)C++20
14 / 100
7093 ms436 KiB
#include <bits/stdc++.h>
#define fi first
#define se second
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
const ll MAXN = 3e5 + 5;
const ll MAXQ = 5e4 + 5;
const ll MAX = 1e18;

// 4 1
// 1 1 1 1
// 1 2

ll n, q, k = 0, ans = MAX;
//								Compressed Cnt
ll cnt[MAXN], compressed[MAXN], ccnt[MAXN];
vector<ll> vec; 
set<ll> st;

ll calc() {
	ll out = n*k*(n+1) - n*(k-1);
	ll sqSum = 0, bef = 0;
	for (int i = 0; i < vec.size(); ++i) {
		ll now = vec[i];
		ll after = (n-ccnt[now]-bef);
		sqSum += bef*bef + after*after;
		bef += ccnt[now];
	}
	
	out = (out - sqSum) / 2;
	return out;
}

void compress() {
	for (auto it = st.begin(); it != st.end(); it++) {
		k++;
		compressed[(*it)] = k;
		ccnt[k] = cnt[(*it)];
	}
}

int main() {
	cin >> n >> q;
	for (int i = 1; i <= n; ++i) {
		ll tmp; cin >> tmp;
		st.insert(tmp);
		cnt[tmp]++;
	}

	compress();

	ll _tmp;
	cin >> _tmp >> _tmp;

	for (int i = 1; i <= k; ++i) {
		vec.push_back(i);
	}

	sort(vec.begin(), vec.end());
	do {
		ans = min(ans, calc());
	} while (next_permutation(vec.begin(), vec.end()));

	cout << ans << "\n";
	return 0;
}
#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...