Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 5709 Accepted Submission(s): 1855
#include<iostream> #include<algorithm> #include<math.h> #define ll long long using namespace std; ll a[100005]; int find1(ll target, ll l,ll r)//l,r是查找的左右区间 { ll left = l, right = r, mid; while (left <= right) { mid = left + (right - left) / 2; if (a[mid] == target) return mid; else if (a[mid] > target) right = mid - 1; else left = mid + 1; } return -1; } int main() { ll t,n,k,cnt; scanf("%lld",&t); while(t--) { cnt=0; scanf("%lld%lld",&n,&k); for(int i=0;i<n;i++) scanf("%lld",&a[i]); sort(a,a+n); for(int i=0;i<n;i++) { if(a[i]>k||a[i]==a[i-1]) continue; else { if(find1(k-a[i],0,n)!=-1) cnt++; } } printf("%lld\n",cnt); } }
2、map
#include<iostream> #include<map> #define ll long long using namespace std; map<ll,ll>m; ll a[100005]; int main() { ll t,n,k,cnt; scanf("%lld",&t); while(t--) { m.clear(),cnt=0; scanf("%lld%lld",&n,&k); for(int i=0;i<n;i++) { scanf("%lld",&a[i]); if(!m[a[i]]) m[a[i]]=1; else { i--;//删除重复的数 n--; } } for(int i=0;i<n;i++) { if(a[i]>k) continue; if(m[k-a[i]]==1) cnt++; } printf("%lld\n",cnt); } return 0; }
hdu 2578 Dating with girls(1) 满足条件x+y=k的x,y有几组
原文:https://www.cnblogs.com/-citywall123/p/11185588.html