- P58's solution
P58's Solution
- 2025-9-14 19:50:10 @
(以下的 下标从 开始)
题目要求我们求以下函数的最小值:
观察发现, 求出 和 后, 可以通过 由 求出:
直接求出 个函数值后输出最小值即可。
#include <bits/stdc++.h>
using namespace std;
long long a[10000012], b[10000012];
int main()
{
ios::sync_with_stdio(0);
int n;
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
a[i + n] = a[i];
}
for (int i = 1; i <= n + n; i++)
b[i] = b[i - 1] + a[i];
long long ans = 0, aa = 0;
for (int i = 1; i <= n; i++)
ans += 1ll * a[i] * (i - 1);
aa = ans;
for (int i = 2, j = n + 1; i <= n; i++, j++)
{
aa -= b[j - 1] - b[i - 1];
aa += 1ll * (n - 1) * a[j];
ans = min(ans, aa);
}
cout << ans % 998244353 << endl;
return 0;
}