2 条题解
-
1
除了用哈希表,还可以优化寻找的速度
#include<cstdio> #include<algorithm> using namespace std; int n,a[100110],x,ans,mid; int main() { scanf("%d",&n); for (int i=1;i<=n;i++) { scanf("%d",&a[i]); } scanf("%d",&x); sort(a+1,a+n+1);//排序 for (int i=1;i<n;i++)//遍历a[i] { //二分查找x-a[i] int left=i+1,right=n;//确定左指针、右指针 while (left<=right) { mid=(left+right)/2; if (a[mid]>x-a[i]) { right=mid-1; } else { left=mid+1; } } if (right!=0&&a[right]+a[i]==x&&left!=i&&right!=i) { ans++; } } printf("%d",ans); return 0; }
-
0
当然也可以用set
#include<bits/stdc++.h> using namespace std; long long n,x,tot; set<int>a; set<int>::iterator it; int main(){ freopen("sumx.in","r",stdin); freopen("sumx.out","w",stdout); scanf("%d",&n); for(int i=1;i<=n;i++){ int y; scanf("%d",&y); a.insert(y); } scanf("%d",&x); for(it=a.begin();it!=a.end();it++){ int hh=x-*it; if(a.find(hh)!=a.end())tot++; } printf("%d",tot/2);//因为会重复找一遍 return 0; }
- 1
信息
- ID
- 532
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- 递交数
- 216
- 已通过
- 25
- 上传者