建设网站盈利分析,网站建设体会,怎样制作自己店铺的小程序,上海seo正题
题目链接:https://www.luogu.com.cn/problem/CF1672E 题目大意
有一个你不知道的长度为nnn的序列lll#xff0c;你每次可以询问一个长度www。交互库会返回一个hhh表示最少能将lll分成多少连续段使得每一段[l,r][l,r][l,r]都满足∑ilrlir−l≤w\sum_{il}^rl_ir-l\leq w∑…正题
题目链接:https://www.luogu.com.cn/problem/CF1672E 题目大意
有一个你不知道的长度为nnn的序列lll你每次可以询问一个长度www。交互库会返回一个hhh表示最少能将lll分成多少连续段使得每一段[l,r][l,r][l,r]都满足∑ilrlir−l≤w\sum_{il}^rl_ir-l\leq w∑ilrlir−l≤w。 但是如果wmax{li}wmax\{l_i\}wmax{li}则会返回000。
你需要在n30n30n30次询问内找到一组最小的w×hw\times hw×h。
1≤n≤20001\leq n\leq 20001≤n≤2000 解题思路
首先www的取值是可能有很多种的但是hhh只有可能是1∼n1\sim n1∼n一个暴力的想法是对于每个hhh都二分一个最小的www但是这样显然搞不定这一题。
但是看这个三十我们肯定是要先二分一个的考虑二分出h1h1h1时的情况那么我们就得到了∑i1nlin−1\sum_{i1}^nl_in-1∑i1nlin−1记为SSS。注意到hhh每一次增大最多帮我们剩下一个111也就是询问hhh时的答案最少是∑i1nlin−hS−h1\sum_{i1}^nl_in-hS-h1∑i1nlin−hS−h1。
所以对于一个hhh有用的www当且仅当h×w∈[S−h1,S]h\times w\in[S-h1,S]h×w∈[S−h1,S]也就是w⌊Sh⌋w\lfloor\frac{S}{h}\rfloorw⌊hS⌋时才有用。
所以对于每一个⌊Sh⌋\lfloor\frac{S}{h}\rfloor⌊hS⌋进行询问就好了。 code
#includecstdio
#includecstring
#includealgorithm
using namespace std;
int n,ans;
int main()
{scanf(%d,n);int l1,rn*2000n-1,h;while(lr){int mid(lr)1;printf(? %d\n,mid);fflush(stdout);scanf(%d,h);if(h1)rmid-1;else lmid1;}ansl;for(int i2;in;i){printf(? %d\n,l/i);fflush(stdout);scanf(%d,h);if(h)ansmin(ans,h*(l/i));}printf(! %d\n,ans);fflush(stdout);return 0;
}