我陷入问题spoj four sum 对于给定的测试用例,我使用二进制搜索解决了这个问题 输入:
6
-45 22 42 -16
-41 -27 56 30
-36 53 -37 77
-36 30 -75 -46
26 -38 -10 62 -32 -54 -6 45
实际输出:3
预期输出:5
#include<bits/stdc++.h>
using namespace std;
int a[4100],b[4100],c[4100],d[4100];
vector <int> s1,s2;
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i]>>b[i]>>c[i]>>d[i];
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
s1.push_back(a[i]+b[j]);
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
s2.push_back((c[i]+d[j]));
}
}
sort(s1.begin(),s1.end());
sort(s2.begin(),s2.end());
int ans = 0;
for(int v: s1){
vector <int> ::iterator x = lower_bound(s2.begin(),s2.end(),v);
vector <int> ::iterator y = upper_bound(s2.begin(),s2.end(),v);
ans+=y-x;
}
cout<<ans<<endl;;
}
答案 0 :(得分:0)
对不起,但是您的算法无法计算出所需的值。例如,给定输入1 1 1 1 1
,它会产生1
的答案,这是不正确的,因为1 + 1 + 1 + 1
不等于0
。