90分,求大佬们帮本蒟蒻看一下!
查看原帖
90分,求大佬们帮本蒟蒻看一下!
1436220
tinalu楼主2024/11/24 18:01
#include <algorithm>
#include <cstdio>
#include <map>

using namespace std;

int n, s[10001], m1, m2, t = -1;
map<int, int> fs[30001], fm;

inline void f(int y, int x) {
	for (int i = 2; i * i <= x; i++)
		while (!(x % i)) {
			x /= i;
			if (!y)
				fm[i] += m2;
			else
				++fs[y][i];
		}
	if (x > 1) {
		if (!y)
			fm[x] += m2;
		else
			++fs[y][x];
	}
}

int main() {
	scanf("%d%d%d", &n, &m1, &m2);
	if (m1 == 1) {
		printf("0\n");
		return 0;
	}
	for (int i = 1; i <= n; i++) {
		scanf("%d", &s[i]);
		f(i, s[i]);
	}
	f(0, m1);
	for (int i = 1; i <= n; i++) {
		bool flag = true;
		int mat = -1;
		for (auto x : fm) {
			int T;
			if (!fs[i][x.first]) {
				flag = false;
				break;
			}
			if (x.second <= fs[i][x.first]) {
				mat = max(mat, 0);
				break;
			}
			if (x.second % fs[i][x.first])
				T = x.second / fs[i][x.first] + 1;
			else
				T = x.second / fs[i][x.first];
			mat = max(mat, T);
		}
		if (flag)
			t = (t == -1?mat:min(t, mat));
	}
	printf("%d\n", t);
	return 0;
}
2024/11/24 18:01
加载中...