hdu 4430 Yukari's Birthday

来源:互联网 发布:浪漫生日祝福 源码 编辑:程序博客网 时间:2024/06/06 01:26

点击打开链接hdu 4430


思路:枚举r+二分k

分析:
1 题目要求的是找到一组最小的r*k,如果r*k相同那么就找r最小的。
2 很明显k>=2,根据n <= 10^12,那么可以知道r的最大值r<50,所以只要枚举枚举r的值,然后二分k的大小找到所有的解,存入一个结构体里面,然后在对结构体排序,那么这样就可以得到最后的ans
3 注意题目说了中心点最多一个蜡烛,所以写二分的时候应该注意判断的条件;
4 还有可能计算得到结果超了long long直接变成负数所以应该对或则个进行判断;
5 还有就是在二分的时候右边界right不能为n,应该是pow(n , 1.0/i);
6 还有hdu上面这一题不能用long long ,用__int64;
7 注意这种涉及到很多次求次方的问题,不要调用库函数自己写一个Pow函数。

代码:

#include<iostream>#include<algorithm>#include<cstdio>#include<cmath>#include<cstring>using namespace std;typedef  __int64 int64;#define MAXN 1000int64 n;struct mulity{   int64 r;   int64 k;   int64 sum;}m[MAXN];/*排序函数*/bool cmp(mulity m1 , mulity m2){   if(m1.sum < m2.sum)     return true;   else if(m1.sum == m2.sum && m1.r < m2.r)     return true;   return false;}/*Pow函数*/int64 Pow(int64 mid , int64 n){   int64 ans = 1;   for(int i = 1 ; i <= n ; i++)      ans *= mid;   return ans;}int main(){   int i , j , cnt;   int64 right , left , mid;   while(scanf("%I64d" , &n) != EOF){       cnt = 0;       for(i = 1 ; i < 50 ; i++){/*枚举r的范围*/          right = pow(n , 1.0/i);          left = 2;                    while(left <= right){              mid = (left+right)/2;              int64 tmp = 0;              for(j = 1 ; j <= i ; j++){                 int64 tmp_sum = Pow(mid , j);                 if(tmp_sum <= 0){/*如果返回的tmp_sum <= 0那么也就是说明超过了long long*/                   tmp = -1;                   break;                 }                 tmp += tmp_sum;              }              if(tmp == n-1 || tmp == n){/*如果计算的结果等于n或n-1*/                  m[cnt].r = i;                  m[cnt].k = mid;                  m[cnt++].sum = i*mid;                  break;              }              else if(tmp <= 0 || tmp > n)/*这里记得判断tmp<0的判断*/                  right = mid-1;              else                  left = mid+1;          }       }       sort(m , m+cnt , cmp);/*排序*/       printf("%I64d %I64d\n" , m[0].r , m[0].k);   }   return 0;}


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 淘宝买家被检测有虚拟交易怎么办 媒体声音突然没有声音了该怎么办 华为微信运动步数为零怎么办 淘宝店铺没货了客户拍了怎么办 房子涨价了卖家反悔不卖了怎么办 买的东西很贵质量不好怎么办 在淘宝开的店账号忘了怎么办 建了个淘宝优惠券群没人购物怎么办 刚开的淘宝店没有生意怎么办 房产代理公司不给渠道结佣金怎么办 天猫超过72小时不发货怎么办 流量魔盒苹果下载怎么打不开怎么办 淘宝包邮店铺新疆地区拍怎么办 淘宝客服当顾客要优惠时怎么办 微信手机号注册的找不到了怎么办 之前注册的微信找不到了怎么办 苹果ipad的id密码忘了怎么办 淘宝和支付宝用一张银行卡怎么办 淘宝卖家填写虚假物流信息怎么办 淘宝店铺的浏览量越来越少怎么办 网上充手机话费充错了怎么办 夜神模拟器上陌陌的位置不对怎么办 如果在大庭广众之下放了个屁怎么办 淘宝分销上传宝贝被系统下架怎么办 酷狗喜欢歌单里面的歌都没了怎么办 苹果手机下载不了微信缓冲怎么办 登陆微信提示版本过低登不了怎么办 苹果手机微信版本过低登不上怎么办 微信小程序显示微信版本过低怎么办 三星手机登微信显示版本过低怎么办 微信版本低无法登录无法升级怎么办 手机淘宝五应用界面无法打开怎么办 入住淘宝主播没有微博粉丝怎么办 手机淘宝领金币怎么没有了怎么办 淘宝荬家缺货对付款买家怎么办 淘宝买家确认收货后申请退款怎么办 淘宝东西失效了但付过款了怎么办 淘宝图片被投诉盗图怎么办原图没了 淘宝退款申请不小心撤销了怎么办 淘宝不小心点了撤销退款怎么办 淘宝上退款不小心撤销了怎么办