出题人题解 | T3
2024-11-21 15:48:06
发布于:香港
15阅读
0回复
0点赞
根据分析,最小值的最大值,可以联想到二分算法。需要考虑的有序性,在题目中寻找。
我们发现, 的结果是一定的,为 。
考虑枚举三者之中最小的间隔,但是不确定元素不止有间隔本身大小,还有间隔之间的差值,这个思路舍弃。
现在考虑二分枚举三个间隔之间的最小的那个差值。
证明:
设 三个间隔从小到大。
枚举三者之间最小差值为 ,那么第二个差值也是不小于 ,否则当前假设 不成立。
设 ,则如果要满足假设必须满足 最小也是 ,同理 最小也是 。此外,对于 还可以通过 ,即为 。
如果根据总长度算出来的理论高度,不小于满足最小间隔差值是 要求的最小高度,即为 化简得到
看似存在两个不确定元素,间隔本身大小,还有间隔之间的差值,但是要求取最小值的最大值,也就是说 要最大,满足题目的前提下是 。即 。
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5+10,MOD = 1e9+7;
map<char,int>mp1,mp2;
int n,a[200];
string s,t;
bool check(int x){
return 3*x <= n-3;
}
int main(){
cin >>n;
n -= 3;
int l = 0,r = n / 3;
while(l<r){
int mid = (l+r+1) / 2;
if(check(mid)) l = mid;//mid 满足要求,把l指向mid位置
else r = mid-1;
}
cout << l;
return 0;
}
当然这题你也可以用结论写,结论自己摸索哈。
这里空空如也
有帮助,赞一个