90分过不了第七个样例
查看原帖
90分过不了第七个样例
1055621
cjr1221楼主2023/12/28 19:25
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<iostream>
using namespace std;
long long arr[100000100] = { 0 };
int com(const void *a, const void *b)
{
	int *pa = (int *)a;
	int *pb = (int *)b;
	return *pa - *pb;
}
int main()
{
	int n, m;
	cin >> n >> m;
	for (int i = 0; i < n; i++)
		cin >> arr[i];
	qsort(arr, n, sizeof(long long ), com);
	int l = 0, r = n - 1;
	int h = 0;
	while (l < r)
	{
		int mid = (l + r) / 2;
		long long sum = 0;
		int kan = arr[mid];
		int k = mid+1;
		while (k < n)
		{
			sum += (arr[k]-kan);
			k++;
		}
		if (sum > m)
		{
			while (sum > m&&kan < arr[mid + 1])
			{
				kan++;
				sum -= (n - mid-1);
			}
		}
		else
		{
			while (sum<m&&kan>arr[mid - 1])
			{
				sum += (n - mid-1);
				kan--;
			}
		}
		h = kan;
		if (kan >= arr[mid + 1]&&(sum- (n - mid))>=m)
		{
			l = mid + 1;
		}
		else if (kan <= arr[mid - 1])
			r = mid;
		else
			break;
	}
	cout << h;
	return 0;
}'''
感觉没有人的解法和我相似,为什么过不了
2023/12/28 19:25
加载中...