CF-1445B Jumps
阿新 • • 發佈:2020-12-02
題意
初始時刻,你位於 \(x\) 軸上的 \(0\) 位置處,現在你要到達 \(x(x>0)\) 處,你可以通過跳躍的方式到達。在第 \(k\) 次跳躍,你可以選擇向右跳躍 \(k\) 個單位距離,或者向左跳躍 \(1\) 個單位。求出到達 \(x\) 處的最少步數。
\(1≤t≤1000,1≤x≤10^6\)
分析
假設連續向右跳躍 \(step\) 後到達點 \(pos=\frac{(step+1)·step}{2}\) 處,並且 \(pos\leq x\) 。如果 \(x=pos\) ,那麼 \(step\) 就是答案。如果 \(pos>x\) ,此時也有 \(\frac{(step-1)step}{2}<x\)
總結:難度不大,但是很少會從這個角度去考慮問題。
程式碼
#include <bits/stdc++.h> using namespace std; int main() { int t,x; scanf("%d",&t); while(t--) { scanf("%d",&x); int step=0; while(step*(step+1)<2*x) step++; if(step*(step+1)/2==x+1) step++; printf("%d\n",step); } return 0; }