2 条题解

  • 1
    @ 2026-7-10 10:22:52

    首先确保单调性,我们在此介绍双指针 复杂度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

    • 0
      @ 2026-2-25 20:20:58

      自己想

      • 1

      信息

      ID
      5224
      时间
      1000ms
      内存
      125MiB
      难度
      3
      标签
      递交数
      414
      已通过
      93
      上传者