2 条题解

  • 2
    @ 2022-4-6 23:31:20

    我回来了

    先说一下,这一题应该开 long long,因为如果数据个数为极限而且都相同那么就有 N2N^2 个解,上限为 (230)2=260(2^{30})^{^2}=2^{60},所以应该开 long long,可是出题人没有这样的数据。

    这一道题我的思路是将 AB=CA-B=C 转换为 B=A+CB=A+C,排序后枚举 BB 在查找有没有 A(B+C)A(B+C) 即可。上界、下界查找 C++\operatorname{C++}STL\operatorname{STL} 有,梳理一下:

    $$\begin{cases} \operatorname{upper\_bound(begin,end,value)}\to 上界查找,返回第一个大于该元素的迭代器(地址,或者说是指针)\\ \operatorname{lower\_bound(begin,end,value)}\to 下界查找,返回第一个小于等于该元素的迭代器(地址,或者说指针) \end{cases} $$

    注:begin和end要地址,比如说指针或者迭代器,value就是要查找的值。不懂的可以浏览或者自行百度

    那么我们用这两个函数返回值的差就可以知道符合条件的 B+CB+C,也就是 AA 的个数,统计即可。

    时间复杂度:

    两个函数的时间复杂度都是 O(log2N)O(\log_2N),总共 NN 次循环,每一次循环有两次函数调用,所以算法复杂度为 O(2Nlog2N)O(2N\log_2N),略微偏高但是容易理解(注:没有考虑 O(Nlog2N)O(N\log_2N) 的排序

    消耗:1.1Mib,641ms\operatorname{1.1Mib,641ms}

    也有哈希做法,普及一下,不贴代码了,大概就是用哈希 O(1)O(1) 的复杂度代替二分查找 O(Nlog2N)O(N\log_2N),但是需要用 O(N)O(N)进行哈希处理,不过可以在读入的时候就解决。这样的时间复杂度为 O(N)O(N)。请读者自行下来写代码,此处不再赘述。 注:哈希理论上的复杂度是O(1),但是解决哈希冲突会影响复杂度,故实际操作的复杂度会比O(1)略高

    代码( 请勿抄袭

    #include<iostream>
    #include<algorithm>
    #include<vector>
    using namespace std;
    
    vector<int>v;
    
    int main(){
        int n,c;
        long long ans=0;
    
        ios::sync_with_stdio(false);
    
        cin>>n>>c;
        v.resize(n);
    
        for(int i=0;i<n;++i){
            cin>>v[i];
        }
    
        sort(v.begin(),v.end());
    
        for(int i=0;i<n;++i){
            ans+=upper_bound(v.begin(),v.end(),v[i]+c)-lower_bound(v.begin(),v.end(),v[i]+c);
        }
    
        cout<<ans<<endl;
    
        return 0;
    }
    
    • 1
      @ 2024-1-29 16:31:37

      世界上最好的题解😄

      #include<bits/stdc++.h>
      using namespace std;
      long long a[200001];
      map<long long,long long>m;
      int main(){
          int n;
          long long c,ans=0;
          cin>>n>>c;
          for(int i=1;i<=n;i++){
              cin>>a[i];
              m[a[i]]++;
              a[i]-=c;    
          } 
          for(int i=1;i<=n;i++)ans+=m[a[i]];
          cout<<ans;
          return 0;
      }
      

      看完别忘了点赞呦👀️

      • 1

      信息

      ID
      103
      时间
      1000ms
      内存
      125MiB
      难度
      2
      标签
      递交数
      68
      已通过
      20
      上传者