双指针,第三个点WA,已开long long,求调qwq
查看原帖
双指针,第三个点WA,已开long long,求调qwq
1153824
Miaojie_China楼主2023/11/14 21:48
#include<stdio.h>
#include<stdlib.h>
int cmp(const void* a, const void* b);
int a[200000], b[200000], flag[200000];
int main()
{
	int n, c, m;
	int i, j;
	long long count = 0;
	scanf("%d %d", &n, &c);
	for (i = 0; i < n; i++)
		scanf("%d", &a[i]);
	qsort(a, n, sizeof(a[0]), cmp);
	for (i = m = 0; i < n; i++)
		if (i == 0 || (i > 0 && a[i] != a[i - 1]))
		{
			flag[m]++;
			b[m++] = a[i];
		}
		else flag[m - 1]++;
	for (i = j = m - 1; i > 0;)
	{
		if (j < 0)
			break;
		if (b[i] - b[j] > c)
			i--;
		else if (b[i] - b[j] < c)
			j--;
		else if (b[i] - b[j] == c)
		{
			count += flag[i] * flag[j];
			i--;
			j--;
		}
	}
	printf("%lld\n", count);
	return 0;
}
int cmp(const void* a, const void* b)
{
	return *(int*)a - *(int*)b;
}
2023/11/14 21:48
加载中...