1 条题解

  • 0
    @ 2025-3-16 17:10:22
    #include <bits/stdc++.h>
    using namespace std;
    const int N = 1e6 + 5;
    using ll = long long;
    int n, c, a[N];
    ll ans;
    
    void solve1(){ // 75+
    	for(int i=1; i<=n; i++)
    		for(int j=1; j<=n; j++)
    			if(i!=j && a[i] - a[j] == c) ans ++; 
    }
    
    int st[N]; 
    void solve2(){ // [0, 90]
    	for(int i=1; i<=n; i++)  st[ a[i] ] ++; // a[i] 出现个数 
    	for(int i=1; i<=n; i++)  ans += st[ a[i] - c ]; 
    }
    
    map<int,int> mp;  // map<x,y>  ----  f(x) = y
    void solve3(){ // 100
    	for(int i=1; i<=n; i++)  mp[ a[i] ] ++; // a[i] 出现个数 
    	for(int i=1; i<=n; i++)  ans += mp[ a[i] - c ]; 
    }
    
    void solve4(){  // 100
       sort(a+1, a+1+n); // 需要排序
    	for(int i=1; i<=n; i++){
    		int x = a[i] - c;
    		int l = lower_bound(a+1, a+1+n, x) -a;
    		int r = upper_bound(a+1, a+1+n, x) -a;
    		ans += r-l;
    	}
    } 
    
    int main() {
    //	freopen("1.in", "r", stdin);
        cin >> n >> c;
        for (int i = 1; i <= n; i++) {
            cin >> a[i];
        }
       solve4();
       cout<<ans;
    }
    
    • 1

    信息

    ID
    312
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    53
    已通过
    8
    上传者