
思路:
两个for暴力判断和为0即可。 这样复杂度是O(n^2)
如果对于n比较大的话,可以考虑数组标记,记录abs(x),这样复杂度是O(n)
如果对于输入的数字范围较大,数组开不下的话,可以考虑哈希存值即可。
O(n^2)
#include<bits/stdc++.h>
using namespace std;
int a[505];
int main(){
int n;cin>>n;
int ans=0;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
if(a[i]+a[j]==0) ++ans;
cout<<ans;
return 0;
}
O(n)
#include<bits/stdc++.h>
using namespace std;
int a[10005];
int main(){
int n;cin>>n;
int ans=0;
while(n--){
int x;cin>>x;
ans+=a[abs(x)];
a[abs(x)]++;
}
cout<<ans;
return 0;
}
321

被折叠的 条评论
为什么被折叠?



