#2 #3 TLE求助QAQA
查看原帖
#2 #3 TLE求助QAQA
1053560
Kotori_Kawaii楼主2023/10/26 21:01
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<math.h>
using namespace std;
int a[200500];

int halffind(int k, int&left, int& right)
{//slivestorm二分算法
    if (k <= a[(left + right) / 2])
		right = (left + right) / 2;
    else
		left = ceil((left * 1.0 + right) / 2);

	if (left != right)
		return halffind(k, left, right);//进行下一步查找
    return left;
}

int main()
{
	int n, c,k,cnt=0;
	scanf("%d%d", &n, &c);
	for (int i = 0; i < n; i++) {
		scanf("%d", &a[i]);
	}
	int left = 0, right = n - 1;
	sort(a, a + n);
	for (int i = n - 1; i >= 0; i--) {
		k = a[i] - c;
		left = 0, right = n - 1;
		if (a[halffind(k, left, right)] - k==0) {
			cnt++;
			left--;
			right++;
			while (a[left] - k==0) {
				left--;
				cnt++;
			}
			while (a[right] - k == 0) {
				right++;
				cnt++;
			}
		}
	}
	printf("%d", cnt);
	return 0;
}
2023/10/26 21:01
加载中...