2 条题解
-
1
首先确保单调性,我们在此介绍双指针 复杂度O(n)
#include<bits/stdc++.h> using namespace std; #define MAXN 200010 int s[MAXN]; int main(){ int n,c; cin>>n>>c; for(int i=0;i<n;i++){ cin>>s[i]; } sort(s,s+n);//确保单调性 int l=0,r=0; long long sum=0;//答案会增加r-l,并将其记录 for(int i=0;i<n;i++){ while(s[l]<s[i]-c&&l<n) l++;//s[l]必须大于或等于s[i]-c while(s[r]<=s[i]-c&&r<n) r++;//s[r]只能大于 if(s[i]-s[l]==c){ sum+=r-l;//若是符合条件,就+=r-l; } } cout<<sum; return 0; }加上排序为O(nlogn) 仔细看,看懂后做下一题(剪贴板没了,所以写的很短,不会再咕了) http://10.131.7.177/p/P1638
- 1
信息
- ID
- 5224
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 3
- 标签
- 递交数
- 414
- 已通过
- 93
- 上传者