hdu4430:http://acm.hdu.edu.cn/showproblem.php?pid=4430

题意:题目的意思就是给你一个s,让你求k,r,其中k,r,满足:k^1+k^2+.....+k^r==s||s-1,并且k*r是最小的,如果有多种情况,r是最小的。

题解:一开始不知道怎么做,听别人说是二分。然后开始往二分上想。

思维过程:一开始就想着怎么二分,首先二分必须找到一个线性关系,找了半天也没有找到什么线性关系,所以不知道怎么二分,也不知道二分什么变量。想了很久,最后看到k*r最小,k是底数,r是指数,所以当r最大时候,k是最小的,同时k*r是最小的,因为k是指数增长的,,当r很大,k只要很小就可以达到s.当k==2的时候,r最多只要40就可以达到s。所以可以枚举r了,然后来找k。这样就慢慢想到,对于固定r,k越大,它的次方和也是随着增大的,所以线性关系出来了,可以二分k,k初始值是s||s-1,所以分两种情况来做,就可以了。不过,这里还要处理一些益处问题,在计算次方和的时候,如果底数大于1e7,其他的值也行,只要不小于1e6就直接跳出,不用计算。具体的,代码中有注释。

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
long long n;
long long k,ans1,lastr,lastk,l,mid,r;
bool judge(long long s,int num,long long flag){
long long ans=,temp=s;
if(s>)return true;//这里是特判,方式爆出long long 因为如果这个数>1e7的话,她的平方必然大于n(考虑n范围)
for(int i=;i<=num;i++){
ans+=temp;
temp*=s;
if(ans>=flag)return true;//这里也是防止溢出
}
return false;
}
bool judge2(long long s,int num){//判断这个数是不是要找的数
long long ans=,temp=s;
if(s>)return false;
for(int i=;i<=num;i++){
ans+=temp;
temp*=s;
if(ans>n)return false;
}
if(ans==n||ans==n-)return true;
return false;
}
int main(){ while(~scanf("%I64d",&n)){
ans1=n-;lastr=;lastk=n-;
for(int i=;i<=;i++){
l=,r=n;
while(l<r){//二分的结果是要么找到了==n的数,要么循环退出
mid=(l+r)/;
if(judge(mid,i,n))
r=mid;
else
l=mid+;
}
if(judge2(l,i)&&ans1>i*l){//检查是否是找到==n的那个数
ans1=i*l;
lastr=i;
lastk=l;
}
l=,r=n-;
while(l<r){//要么找到==n-1的数,要么退出循环
mid=(l+r)/;
if(judge(mid,i,n-))
r=mid;
else
l=mid+;
}
if(judge2(l,i)&&ans1>i*l){//同上
ans1=i*l;
lastr=i;
lastk=l;
}
}
printf("%I64d %I64d\n",lastr,lastk);
}
}

Yukari's Birthday的更多相关文章

  1. HDU4430 Yukari's Birthday(枚举+二分)

    Yukari's Birthday  HDU4430 就是枚举+二分: 注意处理怎样判断溢出...(因为题目只要10^12) 先前还以为要用到快速幂和等比数列的快速求和(但肯定会超__int64) 而 ...

  2. zoj 3665 Yukari's Birthday(枚举+二分)

    Yukari's Birthday Time Limit: 2 Seconds       Memory Limit: 32768 KB Today is Yukari's n-th birthday ...

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

    主题链接: HDU:pid=4430" target="_blank">http://acm.hdu.edu.cn/showproblem.php?pid=4430 ...

  4. Cogs 1995. Yukari

    1995. Yukari ★★☆   输入文件:camera.in   输出文件:camera.out   简单对比时间限制:1 s   内存限制:128 MB 题目背景: 幻想乡的创始人之一,八云紫 ...

  5. hdu 4430 Yukari's Birthday 枚举+二分

    注意会超long long 开i次根号方法,te=(ll)pow(n,1.0/i); Yukari's Birthday Time Limit: 12000/6000 MS (Java/Others) ...

  6. 二分搜索 UVALive 6076 Yukari's Birthday (12长春K)

    题目传送门 题意:问使得sum (k^i) = n || n -1 (1 <= i <= r) 的min (r*k)组合的r和k  分析:r的最大不会超过40,枚举r,二分搜索k.注意会爆 ...

  7. hdu 4430 Yukari's Birthday

    思路: 分析知道1<=r<40:所以可以枚举r,之后再二分k. 代码如下: #include<iostream> #include<stdio.h> #includ ...

  8. HDU 4430 Yukari's Birthday(二分)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4430 题目大意:给定n个蜡烛,围绕蛋糕的中心插同心圆,从里往外分别是第1圈.第2圈....第r圈,第 ...

  9. HDU 4430 Yukari's Birthday (二分+枚举)

    题意:给定一个n(18 ≤ n ≤ 10^12),一个等比数列k + k^2 + .......+ k^r = n 或者 = n-1,求出最小的k*r,如果最小的不唯一,则取r更小的 分析:两个未知数 ...

随机推荐

  1. FastDFS配置说明(中英文)

    FastDFS配置说明 1)tracker.conf # is this config file disabled # false for enabled # true for disabled di ...

  2. Java基础知识强化之集合框架笔记33:Arrays工具类中asList()方法的使用

    1. Arrays工具类中asList()方法的使用 public static <T> List<T> asList(T... a): 把数组转成集合 注意事项: 虽然可以把 ...

  3. [iOS 开发] app无法访问本地相册,且不显示在设置 -隐私 - 照片中

    近几天在使用iOS8的Photos Framework访问本地相册时,app即不会弹出是否允许访问提示框,也无法显示在iPhone的设置-隐私-照片的访问列表中,代码如下: PHAuthorizati ...

  4. Linux写配置HDF5的python包h5py

    闲言碎语不讲,直接进入正题.Python在科学计算的应用越来越丰度,而hdf(5)数据的应用也非常广泛.python提供了h5py包供开发者处理数据(http://www.h5py.org/).在wi ...

  5. java InputStream

    java InputStream 当为网络数据流是,不能以read为-1作为数据结束的尾. 而用下列案例获取数据. Log.v(TAG, "==========start========== ...

  6. python 学习笔记(二)两种方式实现第一个python程序

    在交互模式下: 如果要让Python打印出指定的文字,可以用print语句,然后把希望打印的文字用单引号或者双引号括起来,但不能混用单引号和双引号: >>> print 'hello ...

  7. java验证码Captcha

    import java.awt.Color; import java.io.IOException; import java.util.Random; import javax.servlet.htt ...

  8. SQL server 使用触发器跨数据库备份数据

    create database TriggerTest create table transInfo2 --交易信息表 ( cardID ) not null, --卡号 transType ) no ...

  9. (转)asp.net分页存储过程

    Asp.Net分页存储过程 SQL分页语句 一.比较万能的分页: sql代码: 1 2 3 select top 每页显示的记录数 * from topic where id not in  (sel ...

  10. jacob 操作word

    1. 首先下载jacob-1.18.zip,解压后有两个文件jacob.jar 和 jacob.dll.需要把jacob.jar放到你工程的classpath中并且把jacob.dll放到jdk的bi ...