无聊的函数(二分查找+数论)
来源:互联网 发布:linux中echo命令详解 编辑:程序博客网 时间:2024/06/05 02:18
无聊的函数
时空限制:1s,128MB
数据规模:1<=n<=2000000000
题目描述
定义一个函数:
f(x)=x^x (k=1)
f(x)=(x^x)^x (k=2)
其中 k 为给定的值(1 或 2)。
使得 f(x) 达到或超过 n 位数字的最小正整数 x 是多少?
此题由Luogu P2759 奇怪的函数 改装而来,题目难度上升了一点点。
思路:
对于函数f(x)的位数,可以用lg(x^x)表示,即:lg(x^x)=xlgx
类比的,lg((x^x)^x)=xlg(x^x)=x*xlg(x)
所以这个题可以用二分查找,(1,2000000000)区间查询,时间复杂度为log(2000000000)<40,具有非常优秀的时间复杂度。不知道为什么这个题在Luogu上是【提高+/省选-】难度的,可能是数论难度大的缘故吧。还有还有,luogu只问了当k=1的情况,这个题只要知道指对数相关转换公式的话,就是一枚水题,虽然不大好想。
代码:
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<queue>#include<cmath>using namespace std;int i,j,m,n,k,temp,now;int a[100001];int r(){ int ans=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9') { if(ch=='-') f=-1; ch=getchar(); } while(ch>='0'&&ch<='9') { ans*=10; ans+=ch-'0'; ch=getchar(); } return ans*f;}long long func(long long x){ if(k==1) return floor(x*log10(x)); if(k==2) return floor(x*x*log10(x));}long long erfen(long long le,long long ri){ long long mid,fm,last=0; while(le<=ri) { mid=(le+ri)/2; fm=func(mid); if(fm>n) ri=mid; else if(fm<n) le=mid; else return mid; if(mid==last) break; last=mid; } return ri;}int main(){ freopen("func.in","r",stdin); freopen("func.out","w",stdout); n=r(),k=r(); n--; cout<<erfen(1,2000000000); return 0;}
阅读全文
1 0
- 无聊的函数(二分查找+数论)
- 【二分查找】之无聊BUG
- Trailing Zeroes (III) (数论(二分查找值,规律))
- bsearch()函数(二分查找)
- lower_bound()函数(二分查找)
- 【数论】[NOIP模拟赛]无聊的计算
- C++ 根据二分查找的函数
- stl中二分查找相关的函数
- 浅谈数据的查找(二分查找)
- 二分查找(对半查找)的实现
- 二分查找函数binary_search
- 二分查找通用函数
- 二分查找函数
- 实现二分查找函数
- 154. Factorial (二分+数论)
- codeforces 300E Empire Strikes Back 数论+二分查找
- 二分查找和递归的二分查找
- 算法-查找-线性表的查找(顺序查找,二分查找,分块查找)
- 【leetcode】617. Merge Two Binary Trees
- 栈应用——中缀转后缀+后缀计算
- 2010-2011 ACM-ICPC, NEERC, Southern Subregional Contest【solved :8 / 12 】
- #515. 「LibreOJ β Round #2」贪心只能过样例
- BEMD算法及代码分享
- 无聊的函数(二分查找+数论)
- csu1770: 按钮控制彩灯实验 (树状数组)
- 面试前的一波复习
- <一> c++之虚函数
- BZOJ 3922: Karin的弹幕 线段树 暴力乱搞
- 销售凭证处理的User Exit
- 现在最火的深度学习框架是什么?
- hadoop学习笔记:Ubuntu下搭建eclipse调试环境
- 涂棋盘--网易2017春招实习笔试编程题9