荒废好久了。。。。 $wa$ $wa$ $wa$
与很久之前打过的一场 $cf$ 题目类似 Codeforces Round 829 (Div. 2)D. Factorial Divisibility
对于 $x >= k$, 则 $x!$ 一定可以被 $k!$ 整除,因为 $x!$ 展开为$k! * (k + 1) * (k + 2) * …… * x$。
反之, $x < k$, $x!$ 就不能被 $k!$ 整除。
题目要求 $k$ 尽可能大, 那么应该尽可能消掉比 $k$ 小的 $x$,消去的方法就是凑阶乘。
例如, $4$ 个 $3!$ 之和等于 $3! * 4$ = $4!$.
从 $1$ 开始凑, 如果发现 $i$ 在凑的过程中留有余数,就除不尽了,最大数就是 $i!$ 。
题目元素个数不会超过 $1e5$, 所以最大可以被凑出来的阶乘是 $100000!$。
若所有数都大于 $1e5$, 能整除的就只能是其中最小的数。
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e5 + 10;
int n;
int a[N];
int s[N];
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i ++ ) {
scanf("%d", &a[i]);
if (a[i] <= 1e5) s[a[i]] ++ ;
}
for (int i = 1; i <= 1e5; i ++ ) {
if (s[i] % (i + 1)) {
printf("%d\n", i);
return 0;
}
s[i + 1] += s[i] / (i + 1);
}
int ans = 1e9;
for (int i = 1; i <= n; i ++ ) ans = min(ans, a[i]);
printf("%d\n", ans);
return 0;
}
成功了吗
成功了吗
没出