当前位置: 代码迷 >> 综合 >> I - Increase and Copy(数学+贪心+公式)
  详细解决方案

I - Increase and Copy(数学+贪心+公式)

热度:2   发布时间:2024-01-12 23:58:36.0

链接: link.
写这一道题的时候我知道是用公式,但是忽略了高中学的一个数学函数(对勾函数) 给定三个数n,x,y,要求 xy>=n 这时当x=y的时候即x=sqrt(n)时,有几个细节
① 若x
xn 操作数ans=2x-2;
②若x
x<n 为了使前面两个数之积大于n, 引入变量t,使t=n/x(或者是n/x+1),这里是当n%x
0 ,t=n/x,否则t=n/x+1才能满足条件 操作数ans=x+t-2;
第三种情况x*x>n不予考虑,因为与第二种情况原理相同
代码

#include<bits/stdc++.h>
using namespace std;
int main(){
    int t,n,x,tep,ans;cin>>t;while(t--){
    cin>>n;x=sqrt(n);if(x*x==n) ans=2*x-2;else{
    if(n%x==0) tep=n/x;else tep=n/x+1;ans=x+tep-2;}cout<<ans<<endl;}
}
  相关解决方案