题解:AT_arc077_c [ARC077E] guruguru
思路
先考虑最简单的情况,从
如果有红色按钮,可以一步跳到
注意到这个影响量
上述操作用差分数组解决,时间复杂度
代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
#define rep(i, l, r) for(int i = l; i <= r; ++ i)
#define per(i, r, l) for(int i = r; i >= l; -- i)
const int N = 1e5 + 10, INF = 0x3f3f3f3f3f3f3f3f;
int n, m, a[N], ans = INF, c[N], b[N];
void check(int s, int t)
{
b[1] += t - s;
b[t + 1] -= s + 1;
b[s + 1] += s + 1;
++ c[t + 1];
-- c[s + 1];
if(t <= s) b[1] += 1 + s, b[t + 1] += m, -- c[1];
}
main()
{
scanf("%lld %lld", &n, &m);
rep(i, 1, n) scanf("%lld", &a[i]);
rep(i, 1, n - 1) check(a[i], a[i + 1]);
rep(i, 1, m)
{
c[i] += c[i - 1];
b[i] += b[i - 1];
ans = min(ans, c[i] * i + b[i]);
}
printf("%lld", ans);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步