Codeforces Round 890 (Div. 2)
1.Atcoder Beginner Contest 3122.Educational Codeforces Round 152 (Rated for Div. 2)3.Codeforces Round 889 (Div. 2)4.Codeforces Round 888 (Div. 3)5.Codeforces Round 847 (Div. 3)
6.Codeforces Round 890 (Div. 2)
7.Codeforces Round 892 (Div. 2)8.Codeforces Round 893 (Div. 2)9.Educational Codeforces Round 15310.Codeforces Round 891 (Div. 3)11.Codeforces Round 894 (Div. 3)12.Educational Codeforces Round 154 (Rated for Div. 2)13.Codeforces Round 896 (Div. 2)14.Codeforces Round 855 (Div. 3)15.codeforces round 895 (div. 3)16.Codeforces Round 900 (Div. 3)17.Codeforces Round 901 (Div. 2)18.Codeforces Round 903 (Div. 3)C
题意:
给你一个a
数组每次操作可以选择一对k
次操作,问最后数组里最大的一个数是多少
思路:
当k
是无限的时候,对于一对符合条件的数来说最大值就是
bool check(int i, int x)
{
int sum = 0, idx = i;
while (idx <= n)
{
if (x - (idx - i) > a[idx]) sum += x - (idx - i) - a[idx]; // 当前数可以通过一定的操作来到达目标数字
else return true; // 说明到达了区间最右端且花费不超过k
if (sum > k) return false;
idx++;
}
return false; // 最后一个数没法操作,因为 n + 1 越界
}
void solve()
{
cin >> n >> k;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
}
int ans = -inf;
for (int i = 1; i <= n; i++)
{
int l = 1, r = 2e8;
while (l < r)
{
int mid = (l + r + 1) / 2;
if (check(i, mid)) l = mid;
else r = mid - 1;
}
ans = max(ans, l);
}
cout << ans << endl;
}
本文作者:自动机
本文链接:https://www.cnblogs.com/monituihuo/articles/17615735.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步