CF#1288A Deadline (函数求最值问题)
問題描述
題目大意
輸入 nnn 和 ddd , 能否找到 xxx 使得 x+?dx+1?≤n,(x≤n)x+ \lceil \fracze8trgl8bvbq{x+1} \rceil \leq n \, ,(x \leq n)x+?x+1d??≤n,(x≤n)
如果可以就輸出"YES",否則輸出"NO"。
題目解析
這是一道有意思的題目,用上了高中的函數最值問題的求解。
令f(x)=x+?dx+1?,x≤nf(x)=x+ \lceil \fracze8trgl8bvbq{x+1}\rceil \, ,x \leq nf(x)=x+?x+1d??,x≤n
問題就轉換為,判斷 f(x)min≤nf(x)_{min} \leq nf(x)min?≤n是否成立。
我們先忽略向上取整符號,只要最后 f(x)f(x)f(x) 的結果向上取整就可以了。
令u=x+1,u≤n+1u=x+1\, ,u \leq n + 1u=x+1,u≤n+1
于是,f(u)=u+du?1,u≤n+1f(u)=u+ \fracze8trgl8bvbq{u} - 1\, ,u \leq n + 1f(u)=u+ud??1,u≤n+1
我們對f(u)f(u)f(u) 求導,得 f′(u)=1?du2f^{'}(u)=1- \fracze8trgl8bvbq{u^{2}}f′(u)=1?u2d?
令 f′(u)=0f^{'}(u)=0f′(u)=0,得 u=d,x=d+1u= \sqrtze8trgl8bvbq\ ,x=\sqrtze8trgl8bvbq+1u=d??,x=d?+1
當u>du > \sqrtze8trgl8bvbqu>d? 時, f′(u)>0f^{'}(u)>0f′(u)>0, f′(u)f^{'}(u)f′(u)單調遞增。
當u<du < \sqrtze8trgl8bvbqu<d? 時, f′(u)<0f^{'}(u)<0f′(u)<0, f′(u)f^{'}(u)f′(u)單調遞減。
所以 x=d+1x=\sqrtze8trgl8bvbq+1x=d?+1 時,f(x)f(x)f(x)取得最小值, f(x)min=2d?1f(x)_{min}=2\sqrtze8trgl8bvbq-1f(x)min?=2d??1,只要判斷 2d?1≤n2\sqrtze8trgl8bvbq-1 \leq n2d??1≤n是否成立即可。
看似推導過程很長,但是只要是考過高考的人其實也就是兩分鐘的事情,還好我高中的東西還沒有還給老師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 (函数求最值问题)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ccf-csp #201903-4 消息
- 下一篇: ccf-csp #201912-1 报数