社区讨论
第十一个样例过不了,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;
}
}
CPPcout << 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 条回复,欢迎继续交流。
正在加载回复...