社区讨论

自闭儿童求助qwq

题目总版参与者 3已保存回复 9

讨论操作

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

当前回复
9 条
当前快照
1 份
快照标识符
@mi85xo0k
此快照首次捕获于
2025/11/21 09:09
4 个月前
此快照最后确认于
2025/11/21 09:09
4 个月前
查看原帖
一个简单的二分问题
二分之前的都没有锅
正常枚举答案是对的
不过一改成二分就炸
具体就是在a_b数组里面寻找c_d的值
如果找到就ans++
求dalao帮忙看看趴
详见代码:
CPP
#include<bits/stdc++.h>
#define maxn 4010
using namespace std;

inline int read(){
	int x=0,t=1; char ch=getchar();
	while((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
	if(ch=='-') t=-1,ch=getchar();
	while(ch<='9'&&ch>='0') x=x*10+ch-48,ch=getchar();
	return x*t;
}

int n,ans;
int a[maxn],b[maxn],c[maxn],d[maxn];
int a_b[maxn*maxn],cnt;
int c_d[maxn*maxn],cnt_now;

int main(){
	n=read();
	for(register int i=0;i<n;++i){
		scanf("%d%d%d%d",&a[i],&b[i],&c[i],&d[i]);
	}
	for(register int i=0;i<n;++i){
		for(register int j=0;j<n;++j){
			a_b[cnt]=a[i]+b[j];
			c_d[cnt]=-(c[i]+d[j]);
			cnt++;
		}
	}
	sort(a_b,a_b+n*n);
	for(register int i=0;i<cnt;++i){
		int l=0,r=n*n;
		while(l<r){
			int mid=(l+r)>>1;
			if(c_d[i]==a_b[mid]){ans++; break;}
			if(c_d[i]<a_b[mid]) l=mid+1;
			else r=mid;
		}
	}
	printf("%d",ans);
	return 0;
}
顺便捞一发沉贴
这里

回复

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

正在加载回复...