模拟。
不断分裂,然后计算时间,取个最小值。我也不知道这做法对不对的,读完题猜了一下,抱着$WA$的心态$submit$了,然后跳出一个$AC$。
#include<bits/stdc++.h> using namespace std; long long n; int q; int main() { scanf("%lld%d",&n,&q); long long now=1; long long ans=n; long long ci=0; while(1) { long long nd = n/now; if(n%now!=0) nd++; ans=min(ans,nd+q*ci); now=now*2; ci++; if(now>=n) break; } printf("%lld\n",ans); return 0; }
时间: 2024-10-09 16:40:13