链接:https://contest.ucup.ac/contest/1339
Problem A. Live Love
题目大意
给一个长度为 n 的 01 串(仅由 0 和 1 组成的字符串),其中有 m 个 1 。
分数:等于串中最大连续 1 的个数。
请求出可能的最大分数和最小分数。
思路
1.要得到最大分数,只需使 m 个 1 全部相邻。则最大分数等于 m 。
2.要得到最小分数,就是要尽可能把 1 切开。先假定 m 个 1 连在一起,那么就能切 n-m 刀,也就是切成 n-m+1 个部分。最好的切法是尽可能平均(如果不尽可能平均,就会出现更大的长度)。要尽可能平均地切,那就用除法,如果除不尽,就把结果加 1 。
代码
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
void Solve()
{
int n, m;
cin >> n >> m;
if (n == m)
{
cout << n << ' ' << n << endl;
return;
}
if (m == 0)
{
cout << "0 0\n";
return;
}
int smax = m;
int split = n - m + 1;
int smin = m / split;
if (m % split != 0) ++smin;
cout << smax << ' ' << smin << endl;
}
int main()
{
//ios::sync_with_stdio(false);
//cin.tie(nullptr);
int t;
cin >> t;
while (t--)
{
Solve();
}
return 0;
}