Основное
 
 
Отправитель Задача Язык Вердикт Время Память Отослано Протест.  
45900218 Дорешивание:
xuyu070926
1070J - 29 C++14 (GCC 6-32) Полное решение 124 мс 964 КБ 2018-11-18 06:53:55 2018-11-18 06:53:55
→ Исходный код
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <math.h>
using namespace std;

const int MAXN = 2e5 + 10;
const int INF = 1e9 + 7;
int T, N, M, K;
char S[MAXN];
int A[26], f[MAXN];
int ans;

int main() {
	register int i, j, k;
	scanf("%d", &T);
	while(T--) {
		for(i = 0; i < 26; ++i)
			A[i] = 0;
		scanf("%d%d%d", &N, &M, &K);
		scanf("%s", S);
		for(i = 0; i < K; ++i)
			++A[S[i] - 'A'];
		ans = INF;
		for(i = 0; i < 26; ++i) {
			for(j = 0; j < N; ++j)
				f[j] = INF;
			f[N] = M;
			for(j = 0; j < 26; ++j) if(i != j)
				for(k = 0; k <= N; ++k) {
					f[k] = max(0, f[k] - A[j]);
					if(k + A[j] <= N) f[k] = min(f[k], f[k + A[j]]);
				}
			for(k = 0; k <= N; ++k)
				if(k + f[k] <= A[i])
					ans = min(ans, k * f[k]);
		}
		printf("%d\n", ans);
	}
	return 0;
}
?
Время: ? ms, память: ? КБ
Вердикт: ?
Ввод
?
Вывод участника
?
Ответ жюри
?
Комментарий чекера
?
Диагностика
?
Показать детали тестирования