2 条题解
-
0
Guest
-
1
#include<bits/stdc++.h> using namespace std; int main(){ vector<int>v; int n,m,c=0; cin>>n>>m; for(int i=0;i<n;i++){ int x; cin>>x; v.push_back(x); } sort(v.begin(),v.end()); int l=0,r=0; while(r<n){ int sum=v[r]-v[l]; if(sum==m){ c++; l++; } else if(sum<m){ r++; } else{ l++; } } cout<<c; }
-
0
直接二分(doge)(其实是懒得处理重复的问题doge)
#include<bits/stdc++.h> #define M 200010 using namespace std; int n,c; long long ans=0; int num[M]; int main(){ scanf("%d %d",&n,&c); for(int i=0;i<n;++i) scanf("%d",&num[i]); sort(num,num+n); int mid=0; for(int i=n-1;i>=0;--i){ int l=0,r=n-1; while(l<=r){ mid=(l+r)>>1; if(num[i]-num[mid]>c)l=mid+1; else r=mid-1; } int nmid,ll=0,rr=n-1; while(ll<=rr){ nmid=ll+((rr-ll)>>1); if(num[i]-num[nmid]<c)rr=nmid-1; else ll=nmid+1; } ans+=ll-l; } printf("%lld",ans); return 0; }
- 1
信息
- ID
- 239
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 22
- 已通过
- 12
- 上传者