p8088求助!
  • 板块学术版
  • 楼主tianyun4188awa
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/4 11:18
  • 上次更新2024/10/4 14:07:10
查看原帖
p8088求助!
1415261
tianyun4188awa楼主2024/10/4 11:18
#include <bits/stdc++.h>

using namespace std;

const int N = 2005;

int n, m, k, x;
long long a[N][N];

bool check(long long num)
{
	int cnt1 = 0, cnt2 = 0;
	for (int i = 1; i <= n; i++)
	{
		int l = 1, r = m + 1;
		while (l < r)
		{
			int mid = (l + r) >> 1;
			if (a[i][mid] <= num) r = mid;
			else l = mid + 1;
		}
		if (l > k) cnt1 += l - k;
		else cnt2 += k - l;
	}
	return (cnt1 <= x && cnt1 <= cnt2);
}

int main()
{
	cin >> n >> m;
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= m; j++)
		{
			cin >> a[i][j];
		}
		sort(a[i] + 1, a[i] + m + 1);
		reverse(a[i] + 1, a[i] + m + 1);
	}
	cin >> k >> x;
	long long l = 0, r = 2e18;
	while (l < r)
	{
		long long mid = (l + r) >> 1;
		if (check(mid)) r = mid;
		else l = mid + 1;
	}
	cout << l;
	return 0;
 } 

两个点TLE,其他全AC!

2024/10/4 11:18
加载中...