这个方法#2超时,#3WA,求助大佬
查看原帖
这个方法#2超时,#3WA,求助大佬
1139108
AbcD12340楼主2024/3/27 16:32
#include<iostream>
#include<algorithm>
using namespace std;
long long int a[200005] = { 0 };
int main()
{
	int n = 0, c = 0, i = 0, n1 = 0, l = 0, r = 0, i0 = 1;
	long long int s = 0;
	cin >> n >> c;
	n1 = n;
	while (n--)
	{
		i++;
		cin >> a[i];
	}//输入
	sort(a + 1, a + i + 1);//排序


	for (int t = i0; t < n1; t = i0)
	{
		int num = 0;//对于每一个B满足条件的A的数量
		l = i0-1, r = n1;
		while (l < r)
		{
			int mid = (l + r + 1) >> 1;
			if (a[mid] <= a[t])
			{
				l = mid;
			}
			else
				r = mid - 1;
		}//寻找最后一个B

		for (int t1 = l + 1; t1 <= n1; t1++)
		{
			if (a[t1] - a[t] == c)
				num++;
			else if (a[t1] - a[t] > c)
				break;
		}//寻找所有的A
		i0 = l + 1;//下一次循环的起点
		s += num * (l - t + 1);//结果
	}

	cout << s << endl;
	return 0;
}
2024/3/27 16:32
加载中...