题目链接:Codeforces - Multiplication Table
被题目坑了一下, 应该是第k小,题目说第k大。。。其实转化一下就行
第k大 = 第 n*m-k+1小。
比较明显的二分答案,然后判断比mid大的个数,因为是乘法表所以很好判断。
AC代码:
#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,k,l,r;
inline int check(int mid){
int res=0;
for(int i=1;i<=n;i++){
int t=(mid+i-1)/i;
res+=max(0LL,m-t+1);
}
return res>=k;
}
signed main(){
cin>>n>>m>>k; l=1,r=n*m; k=r-k+1;
while(l<r){
int mid=l+r+1>>1;
if(check(mid)) l=mid;
else r=mid-1;
}
cout<<l;
return 0;
}