社区讨论

第十一个样例过不了,c=0的情况也试过了,可能是哪里没考虑到,求大佬指出

P1102A-B 数对参与者 5已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@mmaknyo7
此快照首次捕获于
2026/03/03 20:16
上周
此快照最后确认于
2026/03/06 20:40
4 天前
查看原帖
#include #include using namespace std; const int N = 200000; long long arr[N];```cpp #include #include using namespace std; const int N = 200000; long long arr[N]; int flag = 0; int binarySearch(long long arr[], int R, int x) { flag = 0; int l = 1; int r = R; int ans = 0; while (l <= r) { int mid = (l + r) / 2; if (arr[mid] == x) { ans = mid; //仅适用于key的值唯一 l = mid + 1; //如果查找最小的下表key,r=m-1 //如果查找最大的下标key,l=m+1 //l = mid + 1; } if (arr[mid] < x) { l = mid + 1; } else if (arr[mid] > x) { r = mid - 1; } } if (ans == 0)flag = 1; return ans; } int binarySearch2(long long arr[], int R, int x) { flag = 0; int l = 1; int r = R; int ans = 0; while (l <= r) { int mid = (l + r) / 2; if (arr[mid] == x) { ans = mid; //仅适用于key的值唯一 r = mid - 1; //如果查找最小的下表key,r=m-1 //如果查找最大的下标key,l=m+1 //l = mid + 1; } if (arr[mid] < x) { l = mid + 1; } else if (arr[mid] > x) { r = mid - 1; } } if (ans == 0)flag = 1; return ans; } int main() { long long n, key; int cnt = 0; cin >> n >> key; for (int i = 1; i <= n; i++) { cin >> arr[i]; } sort(arr + 1, arr + 1 + n); if (key != 0) { for (int i = 1; i <= n; i++) { int x = binarySearch2(arr, n, arr[i] + key); int y = binarySearch(arr, n, arr[i] + key); if (!flag)cnt += y - x + 1; } } else { for (int i = 1; i <= n; i++) { int x = binarySearch2(arr, n, arr[i] + key); int y = binarySearch(arr, n, arr[i] + key); if (!flag)cnt += y - x; } }
CPP
cout << cnt;
}
CPP

int flag = 0;
int  binarySearch(long long arr[], int R, int x) {
	flag = 0;
	int l = 1;
	int r = R;
	int ans = 0;
	while (l <= r) {
		int mid = (l + r) / 2;
		if (arr[mid] == x) {
			ans = mid; //仅适用于key的值唯一
			l = mid + 1;
			//如果查找最小的下表key,r=m-1
			//如果查找最大的下标key,l=m+1
			//l = mid + 1;
		}
		if (arr[mid] < x) {
			l = mid + 1;
		}
		else if (arr[mid] > x) {
			r = mid - 1;
		}
	}
	if (ans == 0)flag = 1;
	return ans;
}
int  binarySearch2(long long arr[], int R, int x) {
	flag = 0;
	int l = 1;
	int r = R;
	int ans = 0;
	while (l <= r) {
		int mid = (l + r) / 2;
		if (arr[mid] == x) {
			ans = mid; //仅适用于key的值唯一
			r = mid - 1;
			//如果查找最小的下表key,r=m-1
			//如果查找最大的下标key,l=m+1
			//l = mid + 1;
		}
		if (arr[mid] < x) {
			l = mid + 1;
		}
		else if (arr[mid] > x) {
			r = mid - 1;
		}
	}
	if (ans == 0)flag = 1;
	return ans;
}
int main() {
	long long n, key;
	int cnt = 0;
	cin >> n >> key;
	for (int i = 1; i <= n; i++) {
		cin >> arr[i];
	}
	sort(arr + 1, arr + 1 + n);
	if (key != 0) {
		for (int i = 1; i <= n; i++) {
			int x = binarySearch2(arr, n, arr[i] + key);
			int y = binarySearch(arr, n, arr[i] + key);
			if (!flag)cnt += y - x + 1;
		}
	}
	else {
		for (int i = 1; i <= n; i++) {
			int x = binarySearch2(arr, n, arr[i] + key);
			int y = binarySearch(arr, n, arr[i] + key);
			if (!flag)cnt += y - x;
		}
	}

	cout << cnt;
}

回复

4 条回复,欢迎继续交流。

正在加载回复...