• codeforces Gym


    题目描述:

    点击打开链接

    这题题意其实很不好理解,你有一个n行的程序,现在程序运行了r时间之后停止了运行,证明此处有一个bug,现在你需要在程序中加printf来调试找到bug所在的位置,你每次加一个printf所需的时间为p,为你在最坏的情况下最少需要多少时间找到bug。

     

     枚举二分三分四分一直到n-1

    查询一般二分查找,这个因为有个printf条件可以实现精准3分到n-1分查找,

     因为三分的话也可以像二分一样确定到底是哪个
     就像1000范围内猜数 如果三分能确定的话就不会用二分 但是三分并不能确定
     

     因为你猜数他只告诉你你报的(一个)数 与答案大小的比较

    而这个printf可以告诉你2个三个或者更多 所以可以三分四分等等

    几分最优是由n的大小和printf辅助时间二者共同确定的

     二分是log2N+printf的时间*log2N 的样子 然后三分是log3N+printf的时间*log3N
    所以枚举几分的同时也要记录 n为某个值时的最优时间 下次再到这个值时就不用重复搜索了
    #include <bits/stdc++.h>
    #include <cmath>
    using namespace std;
    
    #define ll long long
    #define F(i,a,b) for(ll i=a;i<=b;++i)
    #define R(i,a,b) for(int i=a;i<b;++i)
    #define mem(a,b) memset(a,b,sizeof(a))
    
    ll n;
    ll r,p;
    ll a[1000100];
    ll dfs(ll n)
    {
        ll ans=1e18;
        if(n==1||n==0) return 0;
        if(a[n]) return a[n];
        F(i,1,n-1)
        {
            ans=min(ans,dfs(n/(i+1)+((n%(i+1))?1:0))+i*p+r);
        }
        return a[n]=ans;
    }
    int main()
    {
        cin>>n>>r>>p;
        ll ans=0;
        if(n==1) { puts("0");return 0; }
        ans=dfs(n);
        printf("%I64d
    ",ans );
        return 0;
    }
  • 相关阅读:
    WPF 常用path示例
    Grid之 Gridlength 解析
    Binding Relative 示例
    Grid之 好玩的GridSplitter
    Blend 制作水晶按钮
    DockPanel—最守规矩布局控件
    万恶之源python介绍
    04.基本数据类型(list,tuple)
    02.万恶之源python 运算符和编码
    基本数据类型(int, bool, str)
  • 原文地址:https://www.cnblogs.com/mfys/p/7632971.html
Copyright © 2020-2023  润新知