Codeforces - Multiplication Table

题目链接: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;
}
发布了553 篇原创文章 · 获赞 242 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_43826249/article/details/104248460