51Nod 1105 第K大的数 二分答案
Posted #WoNderlAnd#
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51Nod 1105 第K大的数 二分答案相关的知识,希望对你有一定的参考价值。
很典型的二分答案的题目 码着
#include<iostream> #include<algorithm> #include<string> #include<string.h> typedef long long ll; using namespace std; const int MAX = 5e4 + 5; ll n, k, a[MAX], b[MAX]; bool C(ll mid) { ll j = n, cnt = 0; for (ll i = 1; i <= n; i++) { while (j > 0) { if (a[i] * b[j] > mid) j--; else break; } cnt += j; } return cnt >= k; } int main() { ios::sync_with_stdio(false); cin >> n >> k; k = n*n - k+1; for (int i = 1; i <= n; i++) cin >> a[i]>> b[i]; sort(a+1, a + n+1); sort(b+1, b + n+1); ll l = a[1] * b[1], r = a[n] * b[n]; for(int i=0;i<100;i++) { ll mid = (l + r) >> 1; if (C(mid)) r = mid; else l = mid; } cout << r << endl; return 0; }
以上是关于51Nod 1105 第K大的数 二分答案的主要内容,如果未能解决你的问题,请参考以下文章