zoj 3665 数论 二分 两个参数

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4888

两个参数的题,处理方法:枚举小的那个参数,然后二分大的参数

想到二分了,然后两个参数就不会了  然后暴力了下,但是其实K可以很大 所以时间不够

自己写的二分枚举+快速幂程序WA了很久。。。。没明白哪里错了  参考了别人的。。。

//#pragma comment(linker, "/STACK:102400000,102400000")
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
#include <iostream>
#include <iomanip>
#include <cmath>
#include <map>
#include <set>
#include <queue>
using namespace std;

#define ls(rt) rt*2
#define rs(rt) rt*2+1
#define ll long long
#define ull unsigned long long
#define rep(i,s,e) for(int i=s;i<e;i++)
#define repe(i,s,e) for(int i=s;i<=e;i++)
#define CL(a,b) memset(a,b,sizeof(a))
#define IN(s) freopen(s,"r",stdin)
#define OUT(s) freopen(s,"w",stdout)
const ll ll_INF = ((ull)(-1))>>1;
const double EPS = 1e-8;
const double pi = acos(-1.0);
const int INF = 100000000;

ll n,ansr,ansk;

void test(ll d, ll up, int r)
{
    ll sum;
    while(d<up)
    {
        ll mid=(d+up)/2;
        sum=0;
        ll know=1;//k^i
        int flag=0;
        for(int i=1;i<=r;i++)
        {
            know*=mid;
            sum+=know;
            if(sum>1000000000000LL || sum<0 )
            {
                flag=1;
                break;
            }
        }
        if(flag)
        {
            up=mid;
            continue;
        }
        if(sum>n)up=mid;
        else
            d=mid+1;
        if(sum+1 == n || sum==n)
        {
            if(mid*r < ansr*ansk)
                ansr=r,ansk=mid;
                break;
        }
    }
}

int main()
{
    IN("zoj3665.txt");
    while(~scanf("%lld",&n))
    {
        ansr=1;
        ansk=n-1;//
        for(int i=2;i<=64;i++)
            test(1ll,1000000,i);
        printf("%lld %lld\n",ansr,ansk);
    }
    return 0;
}
时间: 2024-08-26 18:41:45

zoj 3665 数论 二分 两个参数的相关文章

zoj 3665 数论 二分法 两个参数

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4888 标题两个参数,途径:小参数的枚举,然后二分法大参数 想想两个点.以后就不会了两个参数  然后在暴力,实上K能够非常大 所以时间不够 自己写的二分枚举+高速幂程序WA了非常久. .. .没明确哪里错了  參考了别人的... //#pragma comment(linker, "/STACK:102400000,102400000") #include <c

HDU 4430 &amp; ZOJ 3665 Yukari&#39;s Birthday(二分+枚举)

题目链接: HDU:http://acm.hdu.edu.cn/showproblem.php?pid=4430 ZJU:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4888 Problem Description Today is Yukari's n-th birthday. Ran and Chen hold a celebration party for her. Now comes the most import

ZOJ 3717 Balloon (二分+2-sat)

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3717 2-sat版题 对半径R进行二分,将二分得到的R用2-sat判,如果2R<dis(i,j),则建边add_and_zero(i,j),然后看是否有解 1 // #pragma comment(linker, "/STACK:102400000,102400000") 2 #include <cstdio> 3 #include <i

三个案例带你看懂LayoutInflater中inflate方法两个参数和三个参数的区别

版权声明:本文为sang原创文章,转载请注明出处. 目录(?)[+] 关于inflate参数问题,我想很多人多多少少都了解一点,网上也有很多关于这方面介绍的文章,但是枯燥的理论或者翻译让很多小伙伴看完之后还是一脸懵逼,so,我今天想通过三个案例来让小伙伴彻底的搞清楚这个东东.本篇博客我们不讲源码,只看使用.源码的解读会在下一篇博文中带来. inflate方法从大范围来看,分两种,三个参数的构造方法和两个参数的构造方法.在这两类中又有细分,OK,那我们就把各种情况都来演示一遍. 1.三个参数的in

C#缓存absoluteExpiration、slidingExpiration两个参数的疑惑

看了很多资料终于搞明白cache中absoluteExpiration,slidingExpiration这两个参数的含义. absoluteExpiration:用于设置绝对过期时间,它表示只要时间一到就过期,所以类型为System.DateTime,当给这个参数设置了一个时间时,slidingExpiration参数的值就只能为Cache.NoSlidingExpiration,否则出错: slidingExpiration:用于设置可调过期时间,它表示当离最后访问超过某个时间段后就过期,所

25.按要求编写一个Java应用程序: (1)编写一个矩形类Rect,包含: 两个属性:矩形的宽width;矩形的高height。 两个构造方法: 1.一个带有两个参数的构造方法,用于将width和height属性初化; 2.一个不带参数的构造方法,将矩形初始化为宽和高都为10。 两个方法: 求矩形面积的方法area() 求矩形周长的方法perimeter() (2)通过继承Rect类编写一个具有

package zhongqiuzuoye; public class Rect { public double width; public double height; Rect(double width,double height) //带有两个参数的构造方法,用于将width和height属性初化; { this.width=width; this.height=height; } Rect() //不带参数的构造方法,将矩形初始化为宽和高都为10. { width=10; height=

python列表sort方法的两个参数key, reverse

使用列表的sort方法可以进行排序,其中有两个参数用来表示排序的方式,代码: In [7]: a = ['x11','abc323','e26','112ddd'] In [8]: a.sort(key=len, reverse=True) In [9]: a Out[9]: ['abc323', '112ddd', 'x11', 'e26'] In [10]: a.sort(key=lambda x:x[-1]) In [11]: a Out[11]: ['x11', 'abc323', 'e

CreateProcess的前两个参数究竟怎么用

CreateProcess是Windows下用于创建进程的API函数,其第一个参数为lpApplicationName,从字面意思上看应该是一个可执行文件的名字,第二个参数为lpCommandLine,从字面意思上看应该是一个启动进程时传给程序的命令行.实际上并没有想象中的那么简单,MSDN上关于该API的这两个参数的说明,长达两屏幕.何耐这些说明都是纯英文的,包括我在内的很多程序员英文都不好,一看就头疼.于是索性就不看了,凭着自己的感觉去用,结果总是出现各种小问题,很不自在.最终硬着头皮看了一

hdu 3641 数论 二分求符合条件的最小值数学杂题

http://acm.hdu.edu.cn/showproblem.php?pid=3641 学到: 1.二分求符合条件的最小值 /*==================================================== 二分查找符合条件的最小值 ======================================================*/ ll solve() { __int64 low = 0, high = INF, mid ; while(low <=