自动刷题机
P4343 [SHOI2015]自动刷题机 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
- 二分n的值。
- 求最大值时,如果judge里面计算的cnt值>=k(这样记录下来的答案会逐渐增大)时就增大n,刚好是k时记录答案
- 求最小值时,如果judge里面计算的cnt值<=k(这样记录下来的答案会逐渐减小)时就减小n,刚好时k时记录答案
#include <bits/stdc++.h>
// https://www.luogu.com.cn/problem/P4343
using namespace std;
#define ll long long
#define MAX 100005
// 2
// 5
// -3
// 9
ll l, k, logg, cnt, datas[MAX], min_ = -1, max_ = -1;
void input()
{
cin >> l >> k;
for (ll i = 1; i <= l; i++)
scanf("%lld", datas + i);
}
void judge(ll n)
{
cnt = logg = 0;
for (ll i = 1; i <= l; i++)
{
logg += datas[i];
if (logg < 0)
logg = 0;
if (logg >= n)
{
logg = 0;
cnt++;
}
}
}
int main()
{
input();
ll right, left;
right = 1e18, left = 1;
while (left <= right)
{
ll mid = (left + right) >> 1;
judge(mid);
if (cnt >= k)
{
if (cnt == k)
max_ = mid;
left = mid + 1;
}
else
right = mid - 1;
}
right = 1e18, left = 1;
while (left <= right)
{
ll mid = (left + right) >> 1;
judge(mid);
if (cnt <= k)
{
if (cnt == k)
min_ = mid;
right = mid - 1;
}
else
left = mid + 1;
}
if (min_ == -1)
printf("-1");
else
printf("%lld %lld", min_, max_);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现