乘法表(百度2016实习生真题)
题目描述度度熊和爷爷在玩一个乘法表游戏。乘法表的第i行第j列位置的元素为i*j,并且乘法表下标编号从1开始,比如2 × 3乘法表为
1 2 3
2 4 6
爷爷十分聪明,对于n*m的乘法表,只要度度熊给出一个数k,爷爷就能立刻告诉度度熊乘法表中元素按照不减顺序排列之后,第k个元素是多少。
你能重复这个游戏吗?
#include<stdio.h>
typedef long long int64;
int64 n,m,k;
int64 keyNum(int64 x)
{
int64 num=0;
for(int i=1;i<=n;i++)
num+=(x/i>=m?m:x/i);
return num;
}
int64 binarySearch(int64 low,int64 high)
{
int64 mid;
while(low<=high)
{
mid=(low+high)/2;
int64 num=keyNum(mid);
if(num==k)
return mid;
if(num<k)
low=mid+1;
else
high=mid-1;
}
return low;
}
int main()
{
scanf("%ld%ld%ld",&n,&m,&k);
printf("%ld\n",binarySearch(1,n*m));
return 0;
}