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-11-08 19:58:01

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

zoj 3665 数论 二分 两个参数

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4888 两个参数的题,处理方法:枚举小的那个参数,然后二分大的参数 想到二分了,然后两个参数就不会了  然后暴力了下,但是其实K可以很大 所以时间不够 自己写的二分枚举+快速幂程序WA了很久....没明白哪里错了  参考了别人的... //#pragma comment(linker, "/STACK:102400000,102400000") #include &l

三个案例带你看懂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的这两个参数的说明,长达两屏幕.何耐这些说明都是纯英文的,包括我在内的很多程序员英文都不好,一看就头疼.于是索性就不看了,凭着自己的感觉去用,结果总是出现各种小问题,很不自在.最终硬着头皮看了一

以指针和引用两种参数实现删除单链表L中所有值为X的结点的函数

下面是单链表的数据结构 typedef struct LNode{ ElemType data; struct LNode *next; }LNode,*Linklist; 1.以指针参数实现 void delete_x_1(LNode *head,ElemType x){//head为单链表头结点,删除结点的值为x LNode *l = head; LNode *p = head->next; while(p != null){ if(p->data == x){ l->next =

木棍加工(dp,两个参数的导弹拦截问题)

题目描述 一堆木头棍子共有n根,每根棍子的长度和宽度都是已知的.棍子可以被一台机器一个接一个地加工.机器处理一根棍子之前需要准备时间.准备时间是这样定义的:     第一根棍子的准备时间为1分钟:     如果刚处理完长度为L,宽度为W的棍子,那么如果下一个棍子长度为Li,宽度为Wi,并且满足L>=Li,W>=Wi,这个棍子就不需要准备时间,否则需要1分钟的准备时间:     计算处理完n根棍子所需要的最短准备时间.比如,你有5根棍子,长度和宽度分别为(4, 9),(5, 2),(2, 1),

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