20241003
缩进优化
我们可以枚举
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e7 + 5, INF = 1e18;
int n, a[N], sum[N], ans = INF, cnt[N];
signed main() {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
sum[a[i]] += a[i];
cnt[a[i]]++;
}
for (int i = 1; i <= 2000000; i++) {
sum[i] += sum[i - 1];
cnt[i] += cnt[i - 1];
}
for (int i = 1; i <= 1000000; i++) {
int tmp = 0;
for (int j = 0; j <= 1000000; j += i) {
tmp += (sum[j + i - 1] - sum[max(0ll, j - 1)]) - (j * (cnt[j + i - 1] - cnt[max(0ll, j - 1)]));
tmp += (j / i) * (cnt[j + i - 1] - cnt[max(0ll, j - 1)]);
}
ans = min(ans, tmp);
}
cout << ans;
return 0;
}
外星人
首先如果
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 5e3 + 5, mod = 998244353;
int n, x, a[N], dp[N][N];
bool cmp(int _x, int _y) {
return _x > _y;
}
signed main() {
cin >> n >> x;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
sort(a + 1, a + n + 1, cmp);
dp[0][x] = 1;
for (int i = 1; i <= n; i++) {
for (int j = 0; j <= x; j++) {
dp[i][j % a[i]] += dp[i - 1][j];
dp[i][j % a[i]] %= mod;
dp[i][j] += (dp[i - 1][j] * (n - i) % mod);
dp[i][j] %= mod;
}
}
int ans = x;
while (!dp[n][ans]) {
ans--;
}
cout << ans << "\n" << dp[n][ans];
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步