欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

CF#1288A Deadline (函数求最值问题)

发布时间:2025/3/20 编程问答 55 豆豆
生活随笔 收集整理的这篇文章主要介绍了 CF#1288A Deadline (函数求最值问题) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

问题描述

题目大意

输入 nnnddd , 能否找到 xxx 使得 x+⌈dx+1⌉≤n,(x≤n)x+ \lceil \frac{d}{x+1} \rceil \leq n \, ,(x \leq n)x+x+1dn,(xn)
如果可以就输出"YES",否则输出"NO"。

题目解析

这是一道有意思的题目,用上了高中的函数最值问题的求解。

f(x)=x+⌈dx+1⌉,x≤nf(x)=x+ \lceil \frac{d}{x+1}\rceil \, ,x \leq nf(x)=x+x+1d,xn

问题就转换为,判断 f(x)min≤nf(x)_{min} \leq nf(x)minn是否成立。

我们先忽略向上取整符号,只要最后 f(x)f(x)f(x) 的结果向上取整就可以了。

u=x+1,u≤n+1u=x+1\, ,u \leq n + 1u=x+1,un+1

于是,f(u)=u+du−1,u≤n+1f(u)=u+ \frac{d}{u} - 1\, ,u \leq n + 1f(u)=u+ud1,un+1

我们对f(u)f(u)f(u) 求导,得 f′(u)=1−du2f^{'}(u)=1- \frac{d}{u^{2}}f(u)=1u2d

f′(u)=0f^{'}(u)=0f(u)=0,得 u=d,x=d+1u= \sqrt{d}\ ,x=\sqrt{d}+1u=d ,x=d+1

u>du > \sqrt{d}u>d 时, f′(u)>0f^{'}(u)>0f(u)>0, f′(u)f^{'}(u)f(u)单调递增。
u<du < \sqrt{d}u<d 时, f′(u)<0f^{'}(u)<0f(u)<0, f′(u)f^{'}(u)f(u)单调递减。

所以 x=d+1x=\sqrt{d}+1x=d+1 时,f(x)f(x)f(x)取得最小值, f(x)min=2d−1f(x)_{min}=2\sqrt{d}-1f(x)min=2d1,只要判断 2d−1≤n2\sqrt{d}-1 \leq n2d1n是否成立即可。

看似推导过程很长,但是只要是考过高考的人其实也就是两分钟的事情,还好我高中的东西还没有还给老师hhh。

题目代码

/*** Author: Veggie*/ #include <bits/stdc++.h> using namespace std; int T, s, d;//ceil是向上取整函数 int ok(int n, int d) {return ceil(2.0 * sqrt(d) - 1) <= n; } int main() {cin >> T;while(T--) {cin >> n >> d;if (d <= n || ok(n, d))printf("YES\n");elseprintf("NO\n");}return 0; }

总结

以上是生活随笔为你收集整理的CF#1288A Deadline (函数求最值问题)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。